1

在 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”将不起作用,因为它实际上并没有禁用“开始”按钮,只是将其隐藏(用户仍然可以使用热键拉出“开始”菜单)。

我已经尝试过使用FindWindowEx0xC017 作为其第三个参数的方法,然后尝试禁用该窗口。它不起作用。该方法仅在首先禁用整个任务栏时才有效。我需要的是一种禁用开始菜单的方法,就像我在上面复制的代码在 XP 中所做的那样。

任何帮助是极大的赞赏。

4

3 回答 3

2

Windows 7 的“正确”版本如下所示:

HWND hStartBtn = FindWindowEx(NULL, NULL, MAKEINTATOM(0xC017), TEXT("Start"));
if (hStartBtn != NULL)
{
    ShowWindow(hStartBtn, FALSE);
}

但是,这只会禁用button,这意味着您不会通过将鼠标光标悬停在它上来获得发光或其他效果。您仍然可以单击任务栏上的按钮区域来打开菜单。显然,单击处理程序现在是在任务栏窗口本身中实现的,而不是作为单独的开始按钮的一部分。这就是为什么您必须首先禁用整个任务栏,因此您在网上找到的大多数解决方案都是这样做的。

但是,看起来“Start Killer”应用程序现在具有禁用触发开始菜单的最常见热键的功能,即Ctrl+EscWindows键。您可以通过启动软件、右键单击任务栏中的图标并从菜单中选择“选项”来找到这些选项。您还可以编辑注册表以禁用 Windows 键,如本知识库文章中所述。如果您想通过代码自己实现相同的功能,唯一的解决方案是低级键盘钩子,它捕获负责的按键事件并丢弃它们。

像这样的无证黑客被用于破解较新版本的 Windows。我想Raymond Chen会笑着说“我告诉过你”之类的话。破解 Windows 界面是一件傻事。或者,正如您在问题中多次所说的那样,“不是一种选择”。

于 2011-02-09T03:38:16.650 回答
0

您需要禁用的开始菜单有什么特别的吗?您可以通过策略设置或各种其他文件权限来执行相同的操作。

于 2011-02-09T05:13:07.123 回答
0

使用此处列出的可用组策略之一。

您没有提到为什么要禁用开始按钮。如果您考虑您不希望您的用户做什么而不是告诉我们您为它选择的解决方案(即“禁用开始按钮”),您可能会想出一个更好的解决方案。

例如,如果您想阻止用户更改某些设置,请阻止设置,而不是开始按钮!或者,如果您不希望他们看到所有已安装的应用程序,请隐藏这些应用程序而不是开始按钮!或者...

(我希望你能在这里看到我的观点)。

于 2011-02-09T15:44:02.727 回答