在Windows XP上,可以使用以下代码禁用“开始”按钮:
hTray = FindWindow (TEXT("Shell_TrayWnd"), NULL);
if (hTray)
{
hStartButton = FindWindowEx(hTray, NULL, TEXT("Button"), NULL);
if (hStartButton) ShowWindow(hStartButton, FALSE);
}
对于公共访问计算机配置,我需要能够在Windows 7上执行此操作。必须禁用“开始”按钮(不仅仅是隐藏),并且任务栏的其余部分仍必须可见且可用。不能选择隐藏任务栏和“开始”按钮。全屏运行不是一种选择。使用“Start Killer”不起作用,因为它实际上没有禁用“开始”按钮,只是隐藏它(用户仍然可以使用热键来拉起“开始”菜单)。
我已经尝试过使用FindWindowEx
和0xC017作为第三个参数的方法,然后尝试禁用该窗口。它不起作用。该方法仅在首先禁用整个任务栏时才有效。我需要的是仅禁用“开始”菜单的方法,就像上面我在XP中重现的代码一样。
非常感谢任何帮助。
答案 0 :(得分:2)
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界面是一个愚蠢的错误。或者,正如你在问题中多次说的那样,“不是一种选择”。
答案 1 :(得分:0)
您需要禁用的开始菜单有什么特别之处吗?您可以通过策略设置或其他各种文件权限执行相同操作。
答案 2 :(得分:0)
使用列出here列出的可用组策略之一。
您没有提及为什么要禁用启动按钮。如果你想到你不希望用户做什么而不是告诉我们你选择的解决方案(即“禁用启动按钮”),你可能会想出一个更好的解决方案。 / p>
例如,如果您想阻止用户更改某些设置,请阻止那个,而不是开始按钮! 或者,如果您不希望他们看到所有已安装的应用程序,请隐藏这些应用程序而不是开始按钮! 还是......
(我希望你在这里看到我的观点)。