PyQt防止程式多開的方法

2021-10-09 13:32:01 字數 2071 閱讀 3236

# coding:utf-8

import sys

from pyqt5.qtcore import qsharedmemory

from pyqt5.qtwidgets import *

def runwindow():

share = qsharedmemory()

share.setkey("main_window")

if share.attach():

msg_box = qmessagebox()

msg_box.setwindowtitle("提示")

msg_box.settext("軟體已在執行!")

msg_box.seticon(qmessagebox.information)

msg_box.addbutton("確定", qmessagebox.yesrole)

msg_box.exec()

sys.exit(-1)

if share.create(1):

win = qwidget()

win.resize(450, 150)

win.move(0, 300)

win.setwindowtitle('測試')

win.show()

if __name__ == '__main__':

runwindow()

# coding:utf-8

import sys

from pyqt5.qtcore import qlockfile

from pyqt5.qtwidgets import *

def runwindow():

if lockfile.trylock(2000):

win = qwidget()

win.resize(450, 150)

win.move(0, 300)

win.setwindowtitle('測試')

win.show()

else:

msg_box = qmessagebox()

msg_box.setwindowtitle("提示")

msg_box.settext("軟體已在執行!")

msg_box.seticon(qmessagebox.information)

msg_box.addbutton("確定", qmessagebox.yesrole)

msg_box.exec()

sys.exit(-1)

if __name__ == '__main__':

runwindow()

# coding:utf-8

import os

import sys

from pyqt5.qtwidgets import *

def checksingelprocess():

import fcntl

global pidfile

pidfile = open(os.path.realpath(sys.ar**[0]), "r") # 執行的檔案

try:

# fcntl.lock_ex 排他鎖:除加鎖程序外其他程序沒有對已加鎖檔案讀寫訪問許可權

# fcntl.lock_nb 非阻塞鎖

fcntl.flock(pidfile, fcntl.lock_ex | fcntl.lock_nb)

except:

print("相同程式正在執行")

return false

else:

return true

def runwindow():

if not checksingelprocess():

sys.exit(-1)

win = qwidget()

win.resize(500, 500)

win.setwindowtitle('測試')

win.show()

if __name__ == '__main__':

runwindow()

遊戲防止多開的常用方法

遊戲主程式的防止同一程式同時執行多個例項的檢測 方法1 a.findwindow 類名,視窗標題 如果返回控制代碼 0 退出 b.enumwindow 配合 getwindowtext h,lpcaption,255 if lpcaption 遊戲標題 then 退出 c.getwindow hwn...

Qt單例項程式 防止程式多開

使用qlocalserver,qlocalsocket實現單例項程序,當已經存在相同程序時且視窗未啟用 遮擋,最小化,托盤 時,啟用程序主視窗。參考文章 class qlocalserver brunning false localserver null mainwindow null 說明 通過s...

qt防止程式多開,windows下測試有效

防多開類 通過記憶體映像與 socket通訊方式 判斷應用是否執行,qt的方法,如果只是windows,可以用互斥,全域性原子等方法 class qlocalserver brunning false localserver null mainwindow null 說明 通過socket通訊實現程...