WinApi如何获取窗体中活动元素的句柄

WinApi how to get the handle of the active element in a form

本文关键字:活动 元素 句柄 窗体 何获取 获取 WinApi      更新时间:2023-10-16

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

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

现在,我需要在同一对话框的文本框区域输入filepath + filename。为此,我需要得到TextBox的句柄。我一直在使用spy++,到目前为止它工作得很好。但是,它没有得到TextBox的句柄。spy++说这个类是"Edit",没有标题。

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

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

实际上TextBox是ComboBox的一部分。如果我在这里加上"ComboBox",它就能很好地处理。但在这种情况下,如果我发送一条文本信息到盒子,它不会在那里放任何文本。

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

由于这不起作用,我有一个想法,在窗口中获得当前活动元素,因为每当打开文本框时,它就会一直处于活动状态。但我找不到任何Api调用。有人能帮我一下吗?

谢谢。

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

如果你试图与一个打开文件对话框从公共对话框库进行交互,你可以发送CDM_GETFOLDERPATHCDM_GETFILEPATH消息到对话框本身,以获得其当前路径和文件名,和一个CDM_SETCONTROLTEXT消息,以改变显示在对话框的cmb13edt1字段的文件名(见资源管理器风格的控制标识符)。