7

我刚刚编写了我的第一个 C# 应用程序,它是一个调度程序。每小时一次,我想弹出一个对话框并将屏幕锁定两分钟以休息一下。

截至目前,我的应用程序只在“TopMost”上显示一个表单,当它需要中断并在两分钟后隐藏它时。

我怎样才能同时锁定屏幕?类似于 Vista 中的 UAC 风格。

4

2 回答 2

8

哎呀,误读了你的问题。Vista 的 UAC 对话框会创建一个新桌面并在其上显示自己。要创建桌面,您可以使用CreateDesktop函数。然后,您可以使用SwitchDesktop切换到它。

如果您真的想重新创建安全桌面的外观,那么您需要先截取屏幕截图并将其显示在您的表单上,并稍微变暗。


下面的原始答案,可能也很有趣:

看一下LockWorkStation功能。

但是,您无法再次以编程方式解锁工作站。这是用户必须自己做的事情。因此,除非您仍然使用顶级窗口技术来拒绝用户的工作空间,否则您不能轻易地至少休息两分钟,只要两分钟还没有结束。

于 2009-10-19T12:01:40.167 回答
5

作为获取屏幕抓取的替代方法(我过去在略有不同的情况下也将其用作一种方法),您还可以通过创建一个全屏并位于所有其他窗口之上的新窗口 (WinForm) 来做到这一点.

如果您将窗口背景颜色设置为纯黑色,然后将不透明度设置为 70-80%,您将获得类似于 UAC 提示的内容。

例如

formName.WindowState = FormWindowState.Maximized; 
formName.FormBorderStyle = FormBorderStyle.None; 
formName.Opacity = 0.70; 
formName.TopMost = true;

当然,明智的做法是在此之上绘制一个窗口,用计数器通知用户屏幕变暗的原因。

根据用例的不同,使用看起来足够像 UAC 提示(人们习惯于看到)的东西来让人们甚至不三思而后行可能就足够了。

与屏幕抓取方法一样,这本身并不能阻止用户通过使用 Windows 键绕过它,或者 -调Alt出开始菜单,或切换到其他任务。TabCtrlEsc

禁用内置键命令需要设置与 Windows 热键相关的注册表键,并且有点棘手(我认为它需要重新启动并且不能即时切换)。

于 2009-10-19T13:46:55.270 回答