如何解决在pythonw应用程序中捕获Windows 10关闭/注销
On older versions of Windows似乎可以从无控制台的python应用程序捕获WM_QUERYENDSESSION
WM_ENDSESSION
事件。但是,在Windows 10(和Python 3.7)上,以下代码仅在使用python.exe
运行时捕获两个事件,而不是在pythonw.exe
运行时捕获(需要pip install pywin32
):
""" Testing Windows shutdown events """
import win32con
import win32api
import win32gui
import time
def log_info(msg):
""" Prints """
print(msg)
f = open("test.log","a")
f.write(msg + "\n")
f.close()
def wndproc(hwnd,msg,wparam,lparam):
log_info("wndproc: %s" % msg)
if __name__ == "__main__":
log_info("*** STARTING ***")
hinst = win32api.GetModuleHandle(None)
wndclass = win32gui.WNDCLASS()
wndclass.hInstance = hinst
wndclass.lpszClassName = "testWindowClass"
messageMap = { win32con.WM_QUERYENDSESSION : wndproc,win32con.WM_ENDSESSION : wndproc,win32con.WM_QUIT : wndproc,win32con.WM_DESTROY : wndproc,win32con.WM_CLOSE : wndproc }
wndclass.lpfnWndProc = messageMap
try:
myWindowClass = win32gui.RegisterClass(wndclass)
hwnd = win32gui.CreateWindowEx(win32con.WS_EX_LEFT,myWindowClass,"testMsgWindow",win32con.CW_USEDEFAULT,hinst,None)
except Exception as e:
log_info("Exception: %s" % str(e))
if hwnd is None:
log_info("hwnd is none!")
else:
log_info("hwnd: %s" % hwnd)
while True:
win32gui.PumpWaitingMessages()
time.sleep(1)
使用pythonw.exe
时是否可以捕获这些事件?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com(将#修改为@)