如何检查 UAC 当前是否挡住了屏幕?

How to check is UAC is currently blacking out the screen?

我正在尝试确定用户帐户控制当前是否正在屏蔽 screen/asking 以获得许可。

我有一个使用 SlimDX 的应用程序,当 UAC 接管屏幕时会导致 DirectX 设备丢失,我可以在 UAC window 关闭后重新创建设备,如果我之前尝试过(即使在 try{}catch{} 和循环中应用程序崩溃)

我查看了 pinvoke 和 msdn,但似乎找不到任何相关信息。有人有想法吗?

注意:我不想以任何方式与这些提示交互,我只想检查它们是否打开,这样我就可以延迟创建我的 DirectX设备。

如果 UAC 提示当前在屏幕上,则 C:\Windows\System32\consent.exe 将是 运行。 There are ways to be notified with a event when a program starts or stops,您可以使用它们并让您的程序在 consent.exe 程序终止后执行重新创建 DirectX 设备的操作。

抱歉回答晚了。但我认为这可能会有所帮助。 据我所知,您不是在寻找一种方法来查看 UAC 是否 运行,而是一种检查 UAC 是否遮挡屏幕的方法。 我已经确认 UAC 正在使用 SwitchDesktop 切换到另一个桌面,因此您可以使用 GetInputDesktop 获取 'active' 桌面。然后使用 GetUserObjectInformation 检查其名称。 'normal' 桌面应该是默认的,而 UAC 在 WinLogon 桌面上将是 运行。 希望对你有帮助。