UAC风格提升提示

我有兴趣在临时会话中启动一个窗口,例如UAC提示如何显示。 有几个人对这个概念有兴趣,所以我想我会在这里问。 从本质上讲,我们要做的是像UAC这样的提升窗口,“你确定你想要……”提示,但是有一个任意的窗口。 最终目标是防止窗口事件挂钩和密码input过程中可能发生的各种其他问题。

我已经快速浏览了UAC API和其他一些地方,但没有什么特别有用的。 很明显,UAC提示会以某种方式被提升到自己的桌面会话,所以必须有一种方法来创build窗口。

Solutions Collecting From Web of "UAC风格提升提示"

您可以使用CreateDesktop创建桌面。 您可以使用SwitchDesktop切换到新的桌面。 然后,您可以在主线程上调用SetThreadDesktop并绘制窗口。 通过使用“Default”作为lpszDesktop调用OpenDesktop并使用SwitchDesktop和该句柄来获取默认桌面的句柄。 您也可以在某个桌面上运行进程。 为了做到这一点,您必须将STARTUPINFO结构的lpDesktop成员设置为运行该进程的桌面的名称。 使用它们后关闭桌面的句柄( CloseDesktop )。

您可以用这种方式在自己的桌面上显示自己的窗口。

UAC和登录UI使用的安全桌面称为“Winlogon”。 为了访问它,你需要系统权限。 路加在他的一个答案中提供了一个例子。

Brian R. Bondy 在桌面和窗口站点写了一篇值得一读的博客文章。