两者的用法有什么区别GetDesktopWindow
and OpenInputDesktop
Windows 中的 API?
至于他们做什么:
GetDesktopWindow()
返回“根”HWND
调用线程当前与哪个桌面关联;也许更好的想法是“扎根HWND
“。所有其他窗口/HWND
桌面上的 s 在某种程度上是这个的后代。顶层窗口是直接子窗口。 (仅消息窗口是一种特殊情况,它们不会显示在 HWND 树上,但仍然属于桌面。)请注意,这与位于后台且包含所有文件和图标的窗口不同在它上面,这可能被正确地称为“Shell 桌面”窗口,您可以使用GetShellWindow()- 它恰好是一种特殊类型的顶级窗口。
OpenInputDesktop()
返回HDESK
当前处于活动状态并接收用户输入的桌面。每个桌面都有自己的树HWND
s 植根于根窗口或“桌面”窗口。
至于它们之间的关系,一旦你有了HDESK,你就可以使用SetThreadDesktop将该桌面设置为线程的默认桌面;然后调用 GetDesktopWindow 将返回该桌面的根 HWND。 (请注意,您首先必须拥有使用该 HDESK 的权限,例如,如果输入桌面是锁定桌面,则通常情况并非如此。)您还可以使用GetThreadDesktop()
得到HDESK
对于当前线程。
你可能会使用GetDesktopWindow()
如果你想遍历HWND
您的应用程序所在的桌面的树 - Spy++ 类型的应用程序可能会使用它来获取根窗口并使用GetWindow()
或者类似的,也许。但大多数应用程序都乐于保持独立,因此不需要了解其他窗口。也许一种常见用途是检查任意窗口是否是顶级窗口:使用GetAncestor(hwnd, GA_PARENT),并检查返回值是否匹配GetDesktopWindow()
.
OpenInputDesktop()
也许更很少使用;大多数应用程序只是坐在它们启动的桌面上并停留在那里。也许如果您编写了一个桌面切换实用程序来创建用户可以在多个桌面之间进行切换的桌面切换实用程序,那么该应用程序或其他一些应用程序可以使用它来确保它在当前桌面上,然后再显示 UI,但这确实不是一种常见的情况根本不。在某个阶段,可能可以编写类似放大镜或屏幕阅读器或其他具有 UI 的应用程序,希望在用户切换桌面时“跟随用户”,但这不适用于安全的锁定桌面 -因此,这些类型的应用程序必须使用另一种方式来处理这种情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)