gpt4 book ai didi

windows - HWND在窗口站中是独一无二的吗?

转载 作者:可可西里 更新时间:2023-11-01 14:39:11 25 4
gpt4 key购买 nike

假设我在WinSta0中创建了两个桌面D1和D2,D2有一个窗口B。

我的问题是:

属于D1的线程能否通过GetWindowText(hwnd for B, ....)获取窗口B的标题文本?

最佳答案

层次结构是 Session => Window Station => Desktop => Thread => window。当您使用服务时, session 很重要,它们在隔离的 session 0 中运行。每个 session 至少有 WinSta0 作为交互式窗口站。 session 0 有额外的服务。

一个窗口站有多个桌面,至少是您通常与之交互的默认桌面和 Winlogon 桌面,一个用于登录和屏幕保护程序的安全桌面。加上您创建的其他桌面,例如您的 D2 桌面。

一个桌面只有一个桌面堆,其中存储了窗口对象。每个 HWND 在该堆中都是唯一的。您将需要 GetThreadDesktop() 跳回层次结构并从已知线程返回到它创建窗口的桌面。 EnumDesktopWindows() 获取该桌面拥有的顶层窗口。

获取线程 ID 通常是一个障碍,您至少需要了解一些有关进程的信息。您可以从中枚举该进程拥有的线程,例如使用 CreateToolhelp32Snapshot()。

这将为您提供桌面句柄。但 GetWindowText 只能使用 D1 句柄,您需要调用 SetThreadDesktop() 才能切换到 D2。

关于windows - HWND在窗口站中是独一无二的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18158780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com