【发布时间】:2014-12-30 05:23:07
【问题描述】:
我有一个在单独线程中运行的窗口。我需要在另一个线程中获取该窗口的句柄。
我不能使用 ::FindWindow API,因为窗口名称会改变,因为我的应用程序可以以其他语言运行。另外,我无权访问用于窗口名称的资源字符串。
我也不能使用 ::GetActiveWindow,因为调用线程 id 和活动窗口线程 id 不同。
请提出一些解决方案。
【问题讨论】:
-
GetGUIThreadInfo似乎是一个合理的选择,假设您有潜在客户线程的 id。 -
如果您自己创建了它,为什么需要搜索它。 window handle in mfc.
-
窗口不是我自己创建的。它属于不同的ocx。我需要它的句柄在我的 ocx 中。两个 ocx 都在同一进程下运行。如何获取窗口的线程ID。
-
因此您既不知道 threadid 也不知道与该窗口相关的任何内容来区分。使用 spy++ 工具检查您的应用程序。这可能会有所帮助
-
给定一个指向 OLE 控件的指针,QI for
IOleWindow,然后使用IOleWindow::GetWindow获取窗口句柄。