WPF是否可以在Windows锁定屏幕上显示showdialog()?

时间:2016-04-29 19:20:50

标签: c# wpf winforms

我写了一个桌面警报应用程序,它向当前登录的所有客户端发送各种通知。该应用程序位于系统托盘中,右键菜单选择警报。发送警报时,会在每个客户端的桌面上显示一个警告类型的弹出窗口。弹出窗口是一个简单的Window类:

alertWindow.showDialog();

我们的PC有一项政策,要求他们在10分钟不活动后自动锁定屏幕。我想知道的是,如果在屏幕锁定时有任何方法可以显示警报。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以将所需信息放入图像中,然后使用Windows运行时API中的Windows.System.UserProfile.Lockscreen类更改锁定屏幕背景。

Windows.System.UserProfile.LockScreen.SetImageFileAsync(file);

答案 1 :(得分:0)

锁屏本身实际上是一个以winlogon权限运行的不同用户会话。

很久以前,我已经在7号窗口做了这样的事情,但现在无法回想起细节。

一般方法是:

  • 打开winlogon进程句柄
  • 从流程中复制访问令牌
  • 使用刚刚复制的访问令牌创建新流程
  • 在锁屏上创建窗口

这是一个非常黑客的方法,使用许多api调用,但唯一有效的。

一旦我回到家用电脑,我就能看到我是否可以找到一些关于我是如何完成它的细节。

[编辑]

我现在有机会审查代码,我不得不说我的情况比概述的要复杂得多。

关键元素是,您需要一个以系统权限运行的服务(我用C ++编写)。 此服务必须从winlogon进程复制模拟令牌,然后使用该新令牌启动新进程。 API函数供参考

  • GetTokenInformation
  • OpenProcessToken
  • DuplicateTokenEx
  • AdjustTokenPrivileges

[/编辑]