【发布时间】:2010-12-20 23:29:43
【问题描述】:
我正在尝试构建一个应用程序,该应用程序需要在运行时锁定对 PC 的访问。我需要让应用在最顶层以全屏模式运行,并确保 alt-tabbing 不允许访问其他应用或任务栏。
到目前为止,我已经设置了 TopMost = true、WindowStyle = WindowStyle.None 和 WindowState = WindowState.Maximized,它们实现了我需要的大部分功能,但我仍然得到任务栏变得可见的实例。我尝试在窗口上实现 LostFocus 行为,但这似乎没有给我所需的行为。
谁能指出我需要实现此行为的方向吗?
其他信息
不幸的是,这个项目的性质是我们无法改变客户端机器,它们运行的是 XP、Vista 和 Win7 的混合。 PC 不归我们所有,但用于以尽可能安全的方式交付内容。 PC 的所有者知道运行该软件的限制,并且很高兴在我们的应用程序执行期间它们被“锁定”,但不能以其他方式更改它们。
其他方式
HakonB 提到了 Scott Hanselman 的 BabySmash 应用程序,所以我去找他处理这种情况的方法。正如 HakonB 所说,这不是处理失去焦点的最干净的方法,但它似乎有效,或者至少在我找到更好的解决方案之前应该这样做。他使用每秒触发的计时器,并触发对 user32.dll 的 SetForegroundWindow(IntPtr hWnd) 方法的调用以获取焦点,无论它是否具有焦点。感谢您的提醒,HakonB!
【问题讨论】:
-
你知道有 Windows 的 Kiosk 版本(我认为它是 XP Embedded 或其他)吗?也许这会满足你的需要:)
-
TaskBar 由 Explorer.exe 呈现,因此您可以终止它或阻止它启动。我隐约记得有一个选择 Windows shell 的注册表项 - 可能可以将其删除,以便没有 shell 启动。您仍然可以使用任务管理器(从 Ctrl-Shift-Escape 或 Ctrl-Alt-Delete 菜单)手动启动资源管理器。
-
不幸的是,这个项目的性质是我们无法更改客户端机器,它们运行的是 XP、Vista 和 Win7 的混合版本。 PC 不归我们所有,但用于以尽可能安全的方式交付内容。我也会更新问题。