arnold Asked:2022-04-05 16:21:21 +0000 UTC2022-04-05 16:21:21 +0000 UTC 2022-04-05 16:21:21 +0000 UTC 重新启动应用程序 772 如何跟踪应用程序的打开副本并关闭主要副本? 我读到互斥量和信号量用于此目的,但我不知道如何将其与PyQt5连接起来。 例如,我启动一个应用程序,启动它后,我再次打开它。例如,我如何警告应用程序已经在运行? 我希望能得到你的帮助。 python 1 个回答 Voted Best Answer S. Nick 2022-04-06T00:47:14Z2022-04-06T00:47:14Z 您可以使用win32gui. 要安装它,请输入 CMD pip install win32gui。 现在这是代码: import win32gui import sys def windowEnumerationHandler(hwnd, top_windows): top_windows.append((hwnd, win32gui.GetWindowText(hwnd))) top_windows = [] win32gui.EnumWindows(windowEnumerationHandler, top_windows) for i, min in enumerate(top_windows): if min[1]: print(f'{i:>4} --> {min[1]} ') # w.setWindowTitle("Test q1346046.py") # vvvvvvvvvvvvvvvv ^^^^^^^^^^^^^^^^ if "Test q1346046.py" in min[1]: print(min, '<---- это приложение уже запущено ранее.') win32gui.ShowWindow(min[0], 5) win32gui.SetForegroundWindow(min[0]) sys.exit() break # ВАША ПРОГРАММА ЗДЕСЬ vvvvvvvvvvvvvvvvvvvvvvvvvvv from PyQt5.QtWidgets import QApplication, QWidget def main(): app = QApplication(sys.argv) w = QWidget() w.resize(500, 200) # vvvvvvvvvvvvvvvv w.setWindowTitle('Test q1346046.py') # !!! +++ # ^^^^^^^^^^^^^^ w.show() sys.exit(app.exec_()) if __name__ == '__main__': main() 通常,程序首先获取每个打开的窗口的名称。 如果窗口名称与程序名称相匹配,它会将程序带到前台并关闭它。 如果没有,则打开一个新程序。
您可以使用
win32gui.要安装它,请输入 CMD
pip install win32gui。现在这是代码:
通常,程序首先获取每个打开的窗口的名称。
如果窗口名称与程序名称相匹配,它会将程序带到前台并关闭它。
如果没有,则打开一个新程序。