[python-win32] Unable to detect shutdown

H.Fujii hisabojp at gmail.com
Wed Mar 9 05:20:12 EST 2022


I'm currently developing a console program in Python 3.9.
I want to detect the shutdown of Windows and save the data to a file safely.
I created a sample program by referring to the following URL.
https://docs.microsoft.com/en-us/windows/console/registering-a-control-handler-function

However, the sample program does not detect shutdown 
(CTRL_SHUTDOWN_EVENT) well.
I have confirmed that CTRL_C_EVENT and CTRL_CLOSE_EVENT can be detected 
successfully.
Please let me know how to detect a successful shutdown.

Sincerely,


Expected behavior and actual behavior.
detecting the shutdown of Windows

Steps to reproduce the problem.
python mian.py

Version of Python and pywin32
Python 3.8.11
pywin32 version 228


# Python Code : main.py
import time
import win32api
import win32con

def ctrl_handler(evt):
     with open('event_info.txt', 'a') as f:
         if evt == win32con.CTRL_C_EVENT:
             f.write("CTRL_C_EVENT\n")
             return True
         elif evt == win32con.CTRL_CLOSE_EVENT:
             f.write("CTRL_CLOSE_EVENT\n")
             return True
         elif evt == win32con.CTRL_BREAK_EVENT:
             f.write("CTRL_BREAK_EVENT\n")
             return False
         elif evt == win32con.CTRL_LOGOFF_EVENT:
             f.write("CTRL_LOGOFF_EVENT\n")
             return False
         elif evt == win32con.CTRL_SHUTDOWN_EVENT:
             f.write("CTRL_SHUTDOWN_EVENT\n")
             return False
         else:
             return False

def main():
     print('Starting Program!')
     win32api.SetConsoleCtrlHandler(ctrl_handler, True)
     while True:
         time.sleep(1)
     print('End of Program!')

if __name__ == "__main__":
     main()


More information about the python-win32 mailing list