在Windows XP上,可以使用以下代码禁用“开始”按钮:
hTray = FindWindow (TEXT("Shell_TrayWnd"), NULL);
if (hTray)
{
hStartButton = FindWindowEx(hTray, NULL, TEXT("Button"), NULL);
if (hStartButton) ShowWindow(hStartButton, FALSE);
}
对于公共访问计算机配置,我需要能够在Windows7上执行此操作。必须禁用“开始”按钮(不仅仅是隐藏),任务栏的其余部分必须仍然可见和可用。隐藏任务栏和“开始”按钮不是一个选项。全屏运行不是一个选项。使用“Start Killer”不会起作用,因为它实际上并没有禁用“开始”按钮,只是将其隐藏起来(用户仍然可以使用热键来打开“开始”菜单)。
我已经尝试过使用带0xC017的
FindWindowEx
作为第三个参数的方法,然后尝试禁用该窗口。它不起作用。只有首先禁用整个任务栏时,此方法才有效。我需要的是一个只禁用开始菜单的方法,就像我在XP中复制的代码一样。任何帮助都非常感谢。
最佳答案
Windows 7的“正确”版本如下所示:
HWND hStartBtn = FindWindowEx(NULL, NULL, MAKEINTATOM(0xC017), TEXT("Start"));
if (hStartBtn != NULL)
{
ShowWindow(hStartBtn, FALSE);
}
但是,这只会禁用按钮,这意味着将鼠标光标悬停在按钮上不会获得辉光或其他效果。您仍然可以单击任务栏上的按钮区域以打开菜单。显然,单击处理程序现在是在任务栏窗口本身实现的,而不是作为单独的开始按钮的一部分。这就是为什么你必须首先禁用整个任务栏,也就是为什么你在网上找到的大多数解决方案都是这样做的。
但是,看起来"Start Killer"应用程序现在有一些功能来禁用触发“开始”菜单的最常见热键,即Ctrl+Esc和键。启动软件,右键单击任务栏中的图标,然后从菜单中选择“选项”,即可找到这些选项。您还可以编辑注册表以禁用Windows项,如this knowledge base article中所述。如果你想通过代码实现同样的功能,唯一的解决方案就是一个低级的键盘钩子,它可以捕获负责的按键事件并丢弃它们。
像这样的无证黑客被用来破坏较新版本的Windows。我想Raymond Chen would chuckle and say something like "I told you so"。破解Windows界面是个愚蠢的差事。或者,就像你在这个问题上多次说的,“不是一个选择”。