【问题标题】:WPF in kiosk mode - taskbar troubles信息亭模式下的 WPF - 任务栏问题
【发布时间】: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 不归我们所有,但用于以尽可能安全的方式交付内容。我也会更新问题。

标签: c# wpf kiosk


【解决方案1】:

看看 Scott Hanselman 的 BabySmash。您可以在BabySmash找到该网站

他有几篇博客文章描述了他在制作申请时所做的工作。它在信息亭模式下具有婴儿安全应用程序。

您可以在Codeplex找到该项目

【讨论】:

  • 我已经看过 BabySmash,但无法从代码/XAML 中推断出他是如何以这种方式隐藏任务栏的。不过,我会重新阅读博客文章,希望能有所启发。谢谢。
  • 他没有像我希望的那样干净利落地实现它:他有一个每秒触发一次的计时器,并且在计时器事件中,他确保他的主窗口是前景窗口。逻辑在 Controller.cs 文件中。顺便说一句,我儿子砸东西时没有打破任何东西:-)
猜你喜欢
  • 2020-03-16
  • 2011-01-24
  • 2016-03-18
  • 2014-01-16
  • 2016-05-14
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
相关资源
最近更新 更多