C 如何在Windows 7上禁用开始按钮(但不禁用任务栏)?

C 如何在Windows 7上禁用开始按钮(但不禁用任务栏)?,c,winapi,windows-7,startmenu,taskbar,C,Winapi,Windows 7,Startmenu,Taskbar,在Windows XP上,可以使用以下代码禁用“开始”按钮: hTray = FindWindow (TEXT("Shell_TrayWnd"), NULL); if (hTray) { hStartButton = FindWindowEx(hTray, NULL, TEXT("Button"), NULL); if (hStartButton) ShowWindow(hStartButton, FALSE); } 对于公共访问计算机配置,我需要能够在Windows 7上执行

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

我已经尝试过使用带有0xC017的
FindWindowEx
作为第三个参数的方法,然后尝试禁用该窗口。它不起作用。只有先禁用整个任务栏时,该方法才有效。我需要的是一个只禁用开始菜单的方法,就像我在XP中复制的代码一样

非常感谢您的帮助。

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

HWND hStartBtn = FindWindowEx(NULL, NULL, MAKEINTATOM(0xC017), TEXT("Start"));
if (hStartBtn != NULL)
{
    ShowWindow(hStartBtn, FALSE);
}
但是,这只会禁用按钮,这意味着您将鼠标光标悬停在按钮上不会获得辉光或其他效果您仍然可以单击任务栏上的按钮区域以打开菜单。显然,单击处理程序现在在任务栏窗口本身中实现,而不是作为单独的开始按钮的一部分。这就是为什么你必须首先禁用整个任务栏,因此你在网上找到的大多数解决方案都是这样做的

但是,应用程序现在似乎具有禁用触发“开始”菜单的最常见热键的功能,即Ctrl+Esc和键。您可以通过启动软件,右键单击任务栏上的图标,然后从菜单中选择“选项”来找到这些选项。您还可以编辑注册表以禁用Windows键,如中所述。如果您想通过代码自己实现同样的功能,唯一的解决方案是使用一个低级键盘挂钩,它捕获了负责的按键事件并将其丢弃


像这样的未经记录的黑客通常会与更新版本的Windows决裂。我想是吧。黑客入侵Windows界面是一件蠢事。或者,正如您在问题中多次提到的,“不是一个选项”。

您是否需要禁用“开始”菜单的某些特殊功能?您可以通过策略设置或各种其他文件权限执行相同操作。

使用列出的可用组策略之一

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

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


(我希望您明白我的观点)。

通常,组策略对象是解决此类问题的正确解决方案。没有组策略设置可完全禁用“开始”按钮。是否要运行kiosk应用程序?那么,为什么要运行explorershell呢。你应该指示Windows运行你自己的shell,这样你就不会面对所有这些垃圾。如上所述,我已经尝试过0xC017方法,但它不起作用。我并不特别关心Raymond Chen在这个问题上的观点,如果Microsoft不希望人们使用“未记录的黑客”来禁用“开始”按钮,那么他们应该通过组策略提供一种有文件证明的方法。@Josh:我看你对一个解决方案没有兴趣阅读我的整个答案。特别是粗体部分。这种方法“很有效”。我甚至在我的机器上试过。但这不是一个“完整”的解决方案,因为一个完整的解决方案是不可能的。我之所以把你介绍给陈先生,不是因为他个人的喜好,而是因为他在负责实现这些功能的WindowsShell团队工作。微软并不特别关心你是否使用了非法的黑客,他们只是不保证他们会继续工作。这正是您所关心的。正如在原始帖子中所述,我尝试使用您描述的方法(使用FindWindowEx和0xC017作为第三个参数,然后禁用此窗口),但这不起作用。我已经在别处看到了这一点。你的设置可能与我的不同吗?我使用的是Windows Aero模式,任务栏设置为与XP类似(没有分组,带有标签的小图标)。@Josh:你仍然忘记了第四个参数,或者这只是禁用按钮,而不是单击区域和打开任务栏的功能。正如我在回答中提到的,该解决方案不会阻止用户打开“开始”菜单;要做到这一点,唯一的方法是将上述方法与完全禁用任务栏相结合,这是您不想做的。我从来没有想过解释一个回答说“这是不可能的”会如此困难。好吧,在这种情况下,我可能不得不求助于使用Start Killer加上完全禁用Windows键(我认为可以使用组策略来实现),并使用AutoHotKey禁用Ctrl+Esc。这将有望防止他们陷入麻烦。(Start Killer是如何完全隐藏按钮并使其他所有东西移到左边的呢?即使是我在XP上使用的方法也在开始按钮所在的位置留下了空白。)是的。必须禁用整个“开始”菜单。系统用户必须通过调整大小以适应除任务栏外的整个屏幕的kiosk实用程序打开应用程序。他们必须能够访问任务栏,这样,如果他们同时打开了多个程序,他们就可以在norma中在它们之间切换