【问题标题】:WPF is it possible to showdialog() on top of Windows lock screen?WPF 是否可以在 Windows 锁定屏幕上显示对话框()?
【发布时间】:2016-08-25 01:35:57
【问题描述】:

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

alertWindow.showDialog();

我们的电脑有一项政策,即在闲置 10 分钟后自动锁定屏幕。我想知道的是是否有任何方法可以在屏幕锁定时显示警报。任何帮助将不胜感激。

【问题讨论】:

    标签: c# wpf winforms


    【解决方案1】:

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

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

    【讨论】:

    • 这不适用于 Windows 7 吗?这似乎仅适用于 Windows 8/10。
    【解决方案2】:

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

    我很久以前在window 7下做过这样的事情,但现在想不起来细节了。

    一般做法是:

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

    这是一种使用许多 api 调用但唯一有效的方法。

    我一回到家里的电脑,我就可以看看我是否能找到一些关于我到底是如何做到的细节。

    [编辑]

    我现在有机会查看代码,我不得不说它比概述的要复杂一些。

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

    • 获取令牌信息
    • OpenProcessToken
    • DuplicateTokenEx
    • 调整令牌特权

    [/编辑]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多