Python 控制台窗体关闭按钮禁用和启用
很多Python控制台程序需长期运行,但是一不小心就点上控制台窗体关闭按钮,没有任何提示就终止了正在运行的程序。 因此需禁用控制台窗体关闭按钮(X),当然根据需要也可以启用关闭按钮。
控制台窗口(windows)需安装pywin32api,引用其中的win32console, win32gui和 win32con 三个模块。获取窗口和菜单句柄,调用win32gui.EnableMenuItem方法。不要用网上有些人采用的win32gui.DeleteMenu方法,那样删除后想恢复就比较麻烦。
EnableMenuItem函数原型:
BOOL EnableMenuItem(
HMENU hMenu, //菜单句柄
UINT uIDEnableItem, //菜单条目的标识符
UINT wEnable //菜单常数标志
);
返回值 :返回值指定的先前状态菜单项。如果菜单项不存在,返回值是0xffffffff
EnableMenuItem函数只能指定下述常数:
· MF_BYCOMMAND 指定参数给出已存在的菜单项的命令ID号。此为缺省值。
· MF_BYPOSITION 指定参数给出已存在菜单项的位置。第一项所在的位置是0。
· MF_DISABLED 使菜单项无效,以便它不能被选择,但不变灰。
· MF_ENABLED 使菜单项有效,以便它能够被选择,并可从变灰的状态中恢复出来。
· MF_GRAYED 使菜单项无效,以便它不能被选择并同时变灰。
根据 win32con,获取关闭按钮菜单条目、菜单常数。关闭按钮菜单条目为win32con.SC_CLOSE;菜单常数win32con.MF_DISABLED使菜单无效,win32con.MF_ENABLED 使菜单有效。
Python 代码如下:
import win32console
import win32gui
import win32con
def DisableCloseButton():
hwnd = win32console.GetConsoleWindow()
if hwnd:
hMenu = win32gui.GetSystemMenu(hwnd, 0)
if hMenu:
win32gui.EnableMenuItem(
hMenu, win32con.SC_CLOSE, win32con.MF_DISABLED)
def EnableCloseButton():
hwnd = win32console.GetConsoleWindow()
if hwnd:
hMenu = win32gui.GetSystemMenu(hwnd, 0)
if hMenu:
win32gui.EnableMenuItem(
hMenu, win32con.SC_CLOSE, win32con.MF_ENABLED)
def setwindowtitle(title):
hwnd = win32console.GetConsoleWindow()
win32gui.SetWindowText(hwnd, title)
if __name__ == "__main__":
setwindowtitle(title="控制台关闭按钮示例")
ok = True
while(ok):
instr = input(">>")
if instr == "exit":
EnableCloseButton()
ok = False
elif instr == "hide":
DisableCloseButton()
elif instr == "show":
EnableCloseButton()
else:
print("\n输入指令:hide——隐藏控制台关闭按钮;show——显示控制台关闭按钮;exit——退出程序")
pass