Quando si utilizza win32api.setConsoleCtrlHandler(), sono in grado di ricevere eventi di spegnimento/disconnessione/ecc. Da Windows e chiudere correttamente la mia app.Python - Eventi di spegnimento di Windows
Tuttavia, questo funziona solo quando si esegue l'applicazione in python.exe (ad esempio, ha una finestra della console), ma non in pythonw.exe (nessuna finestra della console).
Esiste un modo equivalente in Windows per ricevere questi eventi quando non si dispone di alcuna console e nessuna finestra per riceverli? O c'è un modo programmatico per nascondere la finestra della console?
Per essere chiari, il mio obiettivo è essere in grado di ricevere correttamente eventi di spegnimento/disconnessione/ecc. Di Windows, senza mostrare alcun tipo di finestra della console.
MODIFICA: Ho giocato in giro e sono andato un po 'oltre. Ho scritto un pezzo di codice di prova per questo. Quando eseguo un "taskkill/im pythonw.exe", riceverà il messaggio.
Tuttavia, quando eseguo un arresto, riavvio o disconnessione su Windows, non ricevo alcun messaggio.
Ecco tutta la faccenda:
""" Testing Windows shutdown events """
import win32con
import win32api
import win32gui
import sys
import time
#import os
def 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:
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)
Mi sento come se fossi abbastanza vicino qui, ma io sono sicuramente manca qualcosa!
come eseguire questo ... ho provato a eseguire la scriipt fornita, ma non restituisce il sistema antintrusione Logogg, gli eventi di arresto o anche se uccido l'attività dal task manager – Rao