【问题标题】:Getting the handle of the currently focused control inside another application在另一个应用程序中获取当前焦点控件的句柄
【发布时间】:2010-07-26 09:23:22
【问题描述】:

如何检索当前具有焦点的控件的句柄?我正在使用 WH_KEYBOARD_LL 来捕获所有按键,并且我应该能够确定用户在哪个文本框中输入。捕获事件的代码无法直接访问 其他应用程序中的控件。

我知道存在用于获取当前窗口句柄的 win32 函数 GetFocus(),但对于当前控件我需要类似的东西。

任何想法都将不胜感激。

鼠兔

【问题讨论】:

  • 我应该补充一点,当在完整的 .NET 中运行时,GetFocus 函数会为我输入的每个控件返回一个唯一的 Hwnd。但是,当输入 Visual Foxpro 应用程序(托管此托管 dll通过 COM),Hwnd 仅在每个窗口中是唯一的。

标签: user-interface winapi hook


【解决方案1】:

您可以将 GUI 线程 ID 传递给 GetGUIThreadInfo(),这将为您提供 GUITHREADINFO.hwndFocus

【讨论】:

  • 感谢您的建议,但问题仍然与 GetFocus() 相同。看来我无法获得 Visual Foxpro 中控件的句柄。我能得到的只是应用程序内的窗口和子窗口。
  • 你有没有窥探过它?也许控件不是窗口,而是绘制的(如 MS Forms)
  • 我刚刚做了,但深度也仅限于窗口、工具栏、树视图、图像列表,不像您在 .NET Forms 应用程序中看到的那样更深。我找到了以下帖子 (mofeel.net/110-microsoft-public-fox-programmer-exchange/…): FoxPro 不使用 GDI 来绘制它的控件,但它像位图一样绘制它们。看来我想做的事情是不可能的。
  • 我将尝试找到另一个解决方案来解决我的问题。感谢您的帮助。
【解决方案2】:

您可以使用更通用的 WH_MSGFILTER(它在被监控线程的上下文中调用,因此您必须创建一个 DLL)。回调获取 MSG 结构,其中包含有关消息的所有信息(也有句柄)。

【讨论】:

  • 我看了一下API,回调也返回了一个Hwnd,但在Foxpro的情况下,没有。我会遇到同样的问题。无论如何谢谢(我不知道那个钩子)
猜你喜欢
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 2018-11-14
相关资源
最近更新 更多