您可以使用CreateDesktop创建桌面。您可以使用SwitchDesktop切换到新桌面。然后你可以在你的主线程上调用SetThreadDesktop并绘制你的窗口。要通过将“默认”作为lpszDesktop调用OpenDesktop并使用带有此句柄的 SwitchDesktop来获取默认桌面的句柄。您还可以在某个桌面上运行进程。为了做到这一点,您必须将STARTUPINFO结构的lpDesktop成员设置为该进程应该在其上运行的桌面的名称。使用它们后关闭桌面的句柄(CloseDesktop)。
您可以通过这种方式在自己的桌面上显示自己的窗口。
UAC 和登录 UI 使用的安全桌面称为“Winlogon”。为了访问它,您需要系统权限。卢克在他的一个回答中提供了一个例子。
Brian R. Bondy 写了一篇关于桌面和窗口站的博客文章,值得一读。