加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-13 20:43:29 所属栏目:Windows 来源:网络整理
导读:Windows中的GetDesktopWindow和OpenInputDesktop API之间的用法区别是什么? 至于他们做了什么: GetDesktopWindow()返回调用线程当前与之关联的桌面的“根”HWND;它可能更好地被认为是“获得根HWND”.桌面上的所有其他窗口/ HWND都是这种情况的后代.顶级窗
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的应用程序,这些应用程序在切换桌面时会“跟随用户”,但这对于安全的锁定桌面不起作用 – 所以这些类型的应用程序必须使用另一种方式来处理该情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读