我有兴趣在临时会话中启动一个窗口,就像UAC提示出现一样。一些人对这个概念感兴趣,所以我想我会问这里。基本上我们想要的是像UAC这样的高架窗户“你确定你想要< ...>”提示,但有一个任意窗口。最终目标是防止窗口事件挂钩和密码输入期间可能发生的各种其他问题。
我已经快速浏览了UAC API和其他一些地方,但没有什么特别有用的。显然,UAC提示会升级到他们自己的桌面会话某种程度上,所以必须有一种方法以这种方式创建窗口。
答案 0 :(得分:4)
您可以使用CreateDesktop创建桌面。您可以使用SwitchDesktop切换到新桌面。然后你可以在主线程上调用SetThreadDesktop并绘制窗口。要通过调用OpenDesktop并使用“默认”作为 lpszDesktop 来获取默认桌面的句柄,并使用带有此句柄的SwitchDesktop。您还可以在某个桌面上运行进程。为此,您必须将STARTUPINFO结构的 lpDesktop 成员设置为应在其上运行进程的桌面名称。使用它们后关闭桌面的句柄(CloseDesktop)。
您可以通过这种方式在自己的桌面上显示自己的窗口。
UAC和Logon UI使用的安全桌面称为“Winlogon”。要访问它,您需要系统权限。卢克在one of his answers中提供了一个例子。
Brian R. Bondy写了blog entry on desktops and window stations,值得一读。