【问题标题】:WinApi how to get the handle of the active element in a formWinApi如何获取表单中活动元素的句柄
【发布时间】:2014-03-22 06:24:36
【问题描述】:

通过以下代码部分,我可以获得打开的打开文件对话框的句柄。这很好用。

HWND handleForWindow = FindWindow(NULL, "Open");

现在,我需要在同一个对话框的文本框区域中输入文件路径 + 文件名。为此,我需要获取 TextBox 的句柄。我一直在使用 Spy++,到目前为止效果很好。但是,它没有得到 TextBox 的句柄。 Spy++ 说该类是“编辑”并且没有标题。

我用标题和类名尝试了以下和其他一些可能性,但没有运气。

HWND hwndTextBox = FindWindowEx(handleForWindow, 0, "Edit", "Caption");

实际上TextBox 是ComboBox 的一部分。如果我把“ComboBox”放在那里,它会很好地处理。但在这种情况下,如果我向该框发送一条短信,它不会在那里放置任何文本。

SendMessage(hwndTextBox, WM_SETTEXT, 0, (LPARAM)"AnyText");

由于这不起作用,我想到了在窗口中获取当前活动元素,因为 TextBox 在打开时始终处于活动状态。但我找不到任何 Api 调用。谁能帮我解决这个问题?

谢谢。

【问题讨论】:

  • EnumChildWindows 或带有 GWL_CHILD 的 GetWindow 可以帮助您。
  • 为此使用 UI 自动化库,尤其是当您试图控制另一个进程时。有很多选择,C++ 不是首选武器。
  • 是的,你是对的,但这是我需要的最后一步。如果我能以某种方式填充文本框,一切都会完成。

标签: c++ windows api winapi


【解决方案1】:

您可以向 ComboBox 发送 CB_GETCOMBOBOXINFO 消息以检索其编辑框的 HWND

如果您尝试与通用对话框库中的Open File dialog 进行交互,您可以向对话框本身发送CDM_GETFOLDERPATHCDM_GETFILEPATH 消息以获取其当前路径和文件名,并将CDM_SETCONTROLTEXT 消息发送到更改对话框的cmb13edt1 字段中显示的文件名(请参阅Explorer-Style Control Identifiers)。

【讨论】:

  • 这听起来很好,但我无法让它工作。所以我在这里需要一点帮助。 SendMessage(handleForWindow, CDM_SETCONTROLTEXT, IDOK, (LPARAM)"Something");这不会改变任何事情。
  • 这是一个糟糕的评论。你有有效的句柄吗?同样来自 MSDN:对话框必须使用 OFN_EXPLORER 标志创建。
  • 当然我在检查它是否是一个有效的句柄。但是,我错过了 OFN_EXPLORER 标志的部分。谢谢。
猜你喜欢
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
  • 2016-07-02
相关资源
最近更新 更多