【问题标题】:Preventing user from open start menu阻止用户打开开始菜单
【发布时间】:2011-02-10 07:41:15
【问题描述】:

我有一个程序应该阻止用户打开任务管理器和打开开始菜单。我已经添加了禁用任务管理器的代码,现在需要防止用户通过键盘上的 windows 键启动开始菜单。请问有人有什么想法吗?

【问题讨论】:

  • 这听起来像是“组策略”的工作,而不是代码......
  • 令人难以置信的是,这个问题刚刚被其他用户提出。请参阅此处:How can I disable the Start button (but not the Taskbar) on Windows 7? 执行摘要:在 C# 中不可能,但 Start Killer 应用程序将完全按照您的意愿执行。
  • 我不想要代码。我想要解决问题的任何想法。
  • @Mr.DDD:这没有任何意义。如果您问“如果没有任何代码,该应用程序如何做到这一点”,那么答案是我不知道该应用程序是如何做到的。我假设是通过动态修改“explorer.exe”中的资源,但作者没有分享他的源代码。可以说我昨天花了很长时间从各种不同的方式来解决这个问题,并且它在 Windows 7 中不起作用。如果您使用的是早期版本,那当然是可能的。
  • 使用 gpedit.msc 编辑策略。有很多设置供您试验:-)

标签: c#


【解决方案1】:

据我所知,您可以减少用户的访问权限,以便他们在开始菜单上几乎什么都没有,除了关机/注销。

但是出于道德原因,没有内置方法可以禁用开始菜单。

【讨论】:

  • D' 抱歉,这是配置,因此与编程无关,因此不属于 Stack Overflow。在 Stack Overflow 姐妹网站上提问,SuperUser
【解决方案2】:
IntPtr trayHandle = FindWindow("Shell_TrayWnd", null);
IntPtr buttonHandle = FindWindowEx(trayHandle, IntPtr.Zero, "Button", IntPtr.Zero);
bool result = EnableWindow(buttonHandle, false);

这三个函数是 WinAPI: FindWindowFindWindowExEnableWindow

【讨论】:

  • 根据我在回答中链接到的文章,这可能不再适用于 Windows Vista(可能也适用于 Win7)。虽然我还没试过。
  • 这几乎是如何以编程方式执行此操作的唯一方法 - 您可能必须修改其他操作的代码。系统。不过,我自己不会这样做 :-P 以这种方式与用户混淆是令人讨厌的。使用gpedit.msc 是正确执行此操作的方法。
  • @Jaroslav:没有用于隐藏/禁用“开始”菜单的组策略设置。
  • @Cody - 你在另一篇文章中说过,当完全禁用组合任务栏时,有三种方法。你能解释一下吗??
  • @Cody:不完全是,不。有一整节专门用于开始菜单和任务栏,您可以在那里关闭开始菜单项,基本上使开始按钮无用。
【解决方案3】:

我建议您使用策略,但如果您确实需要以编程方式执行此操作,您可以尝试以下方法(不确定它支持哪些版本的 Windows)。

您必须搜索任务栏的进程,然后您必须搜索它的所有线程以找到开始按钮。这篇 CodeProject 文章展示了如何做到这一点:Hiding the Taskbar and Startmenu (start orb) in Windows Vista

您可能还必须创建一些键盘挂钩来禁止用户通过某些键盘组合打开开始菜单。

【讨论】:

  • 该文章中提出的解决方案不适用于 Windows 7。
  • @cody:我相信你的话,没有机会尝试使用 Win7,无论如何这是一种相当可怕的做事方式。
  • 是的,昨天我花了太长时间尝试了类似问题的提问者。我同意这是对安全政策的一种非常误导的尝试,令人沮丧的是人们并不更欣赏您帮助他们的尝试。仍然是一个很好的答案,只是一个值得注意的警告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多