Windows 7
如何禁用控制台窗口上下文菜单的Close
项?
我使用C#中的PInvoke:
const uint MF_BYCOMMAND = 0x00000000;
const uint MF_GRAYED = 0x00000001;
const uint SC_CLOSE = 0xF060;
const uint MF_DISABLED = 0x00000002;
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("User32.dll", SetLastError = true)]
static extern uint EnableMenuItem(IntPtr hMenu, uint itemId, uint uEnable);
...
// Disable the close button and "Close" context menu item of the Console window
IntPtr hwnd = GetConsoleWindow();
IntPtr hmenu = GetSystemMenu(hwnd, false);
uint hWindow = EnableMenuItem(hmenu, SC_CLOSE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
我的代码禁用" X"按钮,但"关闭"项目仍然启用,可以启动:
答案 0 :(得分:3)
SC_CLOSE
是要禁用的相应标识符。 EnableMenuItem
禁用X按钮和菜单项,但看起来这个技巧不起作用(旧操作系统?)。删除菜单项确实有效,包括X框(非客户区处理程序可能无法检查菜单项的状态并应用禁用状态;而禁用的菜单项重新启用并再次可用)。
const HMENU hMenu = GetSystemMenu(GetConsoleWindow(), FALSE);
//EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND);
答案 1 :(得分:-1)
我刚刚编写了一个名为 librs 的类库,您可以在 https://www.dllme.com/dll/files/librs_dll.html 或 http://plweb.pluginweb.ml/viewpage/librs.dll 上下载它,然后您可以编写它 librs.menucontrol.DisableAll();
已更新。