Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ WinApi如何获取窗体中活动元素的句柄_C++_Windows_Api_Winapi - Fatal编程技术网

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

C++ WinApi如何获取窗体中活动元素的句柄,c++,windows,api,winapi,C++,Windows,Api,Winapi,通过下面的代码部分,我可以获得打开的“打开文件”对话框的句柄。那很好 HWND handleForWindow = FindWindow(NULL, "Open"); 现在,我需要在同一个对话框的文本框区域中键入filepath+filename。为此,我需要得到文本框的句柄。我一直在使用Spy++,到目前为止效果非常好。但是,它没有得到文本框的句柄。Spy++说该类是“编辑”的,没有标题 我用标题和类名尝试了以下方法和其他方法,但没有成功 HWND hwndTextBox = FindWin

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

HWND handleForWindow = FindWindow(NULL, "Open");
现在,我需要在同一个对话框的文本框区域中键入filepath+filename。为此,我需要得到文本框的句柄。我一直在使用Spy++,到目前为止效果非常好。但是,它没有得到文本框的句柄。Spy++说该类是“编辑”的,没有标题

我用标题和类名尝试了以下方法和其他方法,但没有成功

HWND hwndTextBox = FindWindowEx(handleForWindow, 0, "Edit", "Caption");
实际上,文本框是ComboBox的一部分。如果我把“ComboBox”放在那里,它会很好地得到控制。但在这种情况下,如果我发送一条短信到盒子,它不会把任何文本放在那里

SendMessage(hwndTextBox, WM_SETTEXT, 0, (LPARAM)"AnyText");
由于这不起作用,我想在窗口中获取当前的活动元素,因为文本框无论何时打开都处于活动状态。但是我找不到任何Api调用。有人能帮我吗

谢谢。

您可以向组合框发送消息,以检索其编辑框的
HWND


如果您试图从通用对话框库与进行交互,则可以向对话框本身发送和消息,以获取其当前路径和文件名,并发送一条消息以更改对话框
cmb13
edt1
字段中显示的文件名(请参阅).

EnumChildWindows或带有GWL\U CHILD的GetWindow可以帮助您。为此,请使用UI自动化库,尤其是在您试图占用另一个进程时。很多选择,C++不是选择的武器。是的,你是对的,但这是我需要的最后一步。如果我能以某种方式填充文本框,一切都会完成。这听起来很好,但我无法让它工作。所以我需要更多的帮助。SendMessage(handleForWindow、CDM_SETCONTROLTEXT、IDOK、(LPRAM)“某物”);这不会改变任何事情。这是一个糟糕的评论。你有有效的手柄吗?同样来自MSDN:对话框必须使用OFN_EXPLORER标志创建。当然,我正在检查它是否是有效句柄。然而,我错过了OFN_EXPLORER标志的一部分。谢谢