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

(0)

相关推荐