我感兴趣的是启动一个临时会话中的窗口,就像UAC提示一样。有一些人对这个概念很感兴趣,所以我想在这里问问。本质上,我们想要的是一个类似于UAC“您确定要<...>”提示的提升窗口,但具有任意窗口。最终目标是防止窗口事件钩子和所有可能在输入密码期间发生的其他问题。
我已经快速查看了UAC API和其他一些地方,但没有什么特别有用的信息。显然,UAC提示会被提升到它们自己的桌面会话某种方式,因此必须有一种创建窗口的方法。
您可以使用 CreateDesktop 创建一个桌面。您可以使用 SwitchDesktop 切换到新的桌面。然后,您可以在主线程上调用 SetThreadDesktop 并绘制窗口。要通过调用具有"Default"作为 lpszDesktop 的参数的 OpenDesktop 来获取默认桌面的句柄,并使用此句柄进行 SwitchDesktop。您还可以在特定桌面上运行进程。为了做到这一点,您必须将 STARTUPINFO 结构的 lpDesktop 成员设置为应该在其上运行进程的桌面名称。在使用完毕后关闭桌面句柄 (CloseDesktop)。
你可以通过这种方式在自己的桌面上显示自己的窗口。
desktops
工具可以很好地实现它。尽管我要达到略微不同的结果,但仍然... - Polynomial