第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python-Windows關(guān)閉事件

Python-Windows關(guān)閉事件

回首憶惘然 2019-12-03 14:56:39
當(dāng)使用win32api.setConsoleCtrlHandler()時,我能夠從Windows接收shutdown / logoff / etc事件,并干凈地關(guān)閉我的應(yīng)用程序。但是,這僅在python.exe(即具有控制臺窗口)下運行應(yīng)用程序時有效,而在pythonw.exe(無控制臺窗口)下運行應(yīng)用程序時有效。當(dāng)您沒有控制臺且沒有窗口接收這些事件時,Windows中是否有一種等效的方式來接收這些事件?或者,是否有編程方式隱藏控制臺窗口?明確一點-我的目標(biāo)是能夠成功接收Windows關(guān)閉/注銷/等事件,而無需顯示任何類型的控制臺窗口。編輯: 我一直在玩,并且我已經(jīng)走了很多。我為此編寫了一段測試代碼。當(dāng)我執(zhí)行“ taskkill / im pythonw.exe”時,它將收到該消息。但是,當(dāng)我在Windows上關(guān)閉,重新啟動或注銷時,沒有收到任何消息。整個過程如下:""" Testing Windows shutdown events """import win32conimport win32apiimport win32guiimport sysimport timedef log_info(msg):    """ Prints """    print msg    f = open("c:\\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",                                      0,                                      0,                                      0,                                      win32con.CW_USEDEFAULT,                                      win32con.CW_USEDEFAULT,                                      win32con.HWND_MESSAGE,                                      0,                                      hinst,                                      None)    except Exception, e:我覺得我離這里很近,但我肯定缺少什么!
查看完整描述

2 回答

?
慕容森

TA貢獻(xiàn)1853條經(jīng)驗 獲得超18個贊

這里的問題是HWND_MESSAGE窗口類型實際上未接收到廣播消息,例如WM_QUERYENDSESSION和WM_ENDSESSION。

因此,我沒有指定win32con.HWND_MESSAGE作為CreateWindowEx()的“父窗口”參數(shù),而是指定了“ 0”。

基本上,這會創(chuàng)建一個實際的窗口,但我從未展示過它,因此實際上是同一回事?,F(xiàn)在,我可以成功接收這些廣播消息并正確關(guān)閉該應(yīng)用程序。


查看完整回答
反對 回復(fù) 2019-12-03
?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗 獲得超2個贊

如果您沒有控制臺,那么設(shè)置控制臺處理程序當(dāng)然是行不通的。您可以通過打開另一個窗口(不必可見)在GUI(非控制臺)程序上接收系統(tǒng)事件,確保在其上提供并處理一個正常的“消息泵”,這WM_QUERYENDSESSION就是消息在告訴您的窗口有關(guān)關(guān)閉和注銷事件(您的窗口可以通過為此消息返回0來嘗試向結(jié)束會話回退)。(“ Windows服務(wù)”與普通應(yīng)用程序不同-如果您正在編寫,請參見此處的示例)。


查看完整回答
反對 回復(fù) 2019-12-03
  • 2 回答
  • 0 關(guān)注
  • 1113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號