【问题标题】:get handle of window获取窗口句柄
【发布时间】: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 获取窗口句柄。

标签: c++ mfc window handle


【解决方案1】:

不必将窗口名称传递给 FindWindow 函数。您可以为窗口名称传递 NULL 并仅使用 lpClassName 参数查找窗口。

MFC 通常会自动分配窗口类名,但您可以通过向 AfxRegisterClass 注册一个唯一的名称并使用该注册的类名创建窗口来控制窗口的类名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-22
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2013-01-25
    • 2015-07-21
    • 1970-01-01
    相关资源
    最近更新 更多