Windows中的GetDesktopWindow和OpenInputDesktop API有什么区别?

前端之家收集整理的这篇文章主要介绍了Windows中的GetDesktopWindow和OpenInputDesktop API有什么区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Windows中的GetDesktopWindow和OpenInputDesktop API之间的用法区别是什么?
至于他们做了什么:

GetDesktopWindow()返回调用线程当前与之关联的桌面的“根”HWND;它可能更好地被认为是“获得根HWND”.桌面上的所有其他窗口/ HWND都是这种情况的后代.顶级窗户是直接儿童. (仅消息窗口是一种特殊情况,它们不会显示在HWND树上,但仍属于桌面.)请注意,这与所有文件和图标在后台的窗口不同在它上面,这可能恰当地称为“Shell桌面”窗口,你可以使用GetShellWindow()获得它 – 它恰好是一种特殊类型的顶级窗口.

OpenInputDesktop()返回当前处于活动状态并接收用户输入的桌面的HDESK.每个桌面都有自己的HWND树,其根植于根窗口或“桌面”窗口.

至于这些是如何相关的,一旦你有HDESK,你可以使用SetThreadDesktop将该桌面设置为线程的默认桌面;然后调用GetDesktopWindow将返回该桌面的根HWND. (请注意,您必须首先拥有使用该HDESK的权限,例如,如果输入桌面是锁定的桌面,通常不是这种情况.)您还可以使用GetThreadDesktop()获取当前的HDESK线.

如果你想遍历应用程序所在桌面的HWND树,你可以使用GetDesktopWindow() – 间谍式应用程序可能会使用它来获取根窗口并使用GetWindow()或类似方法从那里遍历.但大多数应用程序都很乐意保持自己,所以不需要知道其他窗口是什么.也许一个常见用途是检查任意窗口是否为顶级:使用GetAncestor(hwnd,GA_PARENT),并检查返回值是否与GetDesktopWindow()匹配.

OpenInputDesktop()可能更少使用;大多数应用只是坐在他们开始的桌面上并留在那里.也许如果您编写了一个桌面切换实用程序来创建用户可以在其间切换的多个桌面,那么该应用程序或其他应用程序可以使用它来确保它在当前显示UI之前,但这确实不是常见的情况一点都不在一个阶段可能有可能编写像放大镜或屏幕阅读器或其他具有UI的应用程序,这些应用程序在切换桌面时会“跟随用户”,但这对于安全的锁定桌面不起作用 – 所以这些类型的应用程序必须使用另一种方式来处理该情况.

原文链接:https://www.f2er.com/windows/372141.html

猜你在找的Windows相关文章