# 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通訊實現程...