簡體   English   中英

如何更改Windows控制台窗口上X按鈕的功能?

[英]How do I change what the X button does on the Windows console window?

我在Python中有一個常規的控制台窗口(Windows 8.1),我想更改close / X按鈕的功能。 游戲結束時,需要進行一些清理工作,例如,我該如何覆蓋它呢?

您可以通過使用SetConsoleCtrlHandler指定指定用於Ctrl-C,Ctrl-Break,控制台退出和系統關閉事件的函數來攔截控制台關閉事件。 對於控制台退出事件,您不能阻止控制台被破壞,但是您可以攔截該事件並運行一些代碼。 例如:

import sys
import time
import win32api

forever = True
handled_ctrl_type = None

def handler(ctrl_type):
    global forever, handled_ctrl_type
    forever = False
    handled_ctrl_type = ctrl_type
    print("HANDLER")
    return True

def main(args = None):
    win32api.SetConsoleCtrlHandler(handler, True)
    n = 0
    while forever:
        time.sleep(1)
        print(n)
        n = n + 1
    print("exiting...", handled_ctrl_type)
    return 0

if __name__ == '__main__':
    sys.exit(main())

如果這是在控制台中運行(使用Python 3),並且您按了Ctrl-C,則應該得到以下內容:

c:\src>python python\setconsolectrl.py
0
HANDLER
1
exiting... 0

其中0是CTRL_C_EVENT的值。 對於控制台出口,我們應該在此處設置2,以便我們可以判斷生成了哪種事件。

如果您運行此程序並按紅色大X來關閉控制台,則可以看到控制台被銷毀時正在打印HANDLER。 您應該在文件中添加一些日志記錄,以確保真正調用了所有清理操作,但這看起來應該可以解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM