C++ 在不属于所创建子流程的窗口上获取HWND

C++ 在不属于所创建子流程的窗口上获取HWND,c++,winapi,explorer,hwnd,C++,Winapi,Explorer,Hwnd,我正在使用以下代码启动一个新的Windows资源管理器窗口,需要获得该窗口的HWND,最好尽早(即在显示该窗口之前): 但是,窗口不属于创建的子流程,因此获取句柄需要非常规技巧。到目前为止,我尝试的是将窗口打开到一个具有特殊名称的目录(如%TEMP%\),并连续扫描顶级窗口,直到找到其标题包含目录路径的窗口。这显然是次优的,所以我正在寻找一些如何“正确”做到这一点的诀窍。也许Explorer基础设施的特点是可以干净地完成这项工作。提前谢谢你 您可以使用该对象枚举资源管理器窗口。可以捕获窗口创建。

我正在使用以下代码启动一个新的Windows资源管理器窗口,需要获得该窗口的HWND,最好尽早(即在显示该窗口之前):


但是,窗口不属于创建的子流程,因此获取句柄需要非常规技巧。到目前为止,我尝试的是将窗口打开到一个具有特殊名称的目录(如
%TEMP%\
),并连续扫描顶级窗口,直到找到其标题包含目录路径的窗口。这显然是次优的,所以我正在寻找一些如何“正确”做到这一点的诀窍。也许Explorer基础设施的特点是可以干净地完成这项工作。提前谢谢你

您可以使用该对象枚举资源管理器窗口。可以捕获窗口创建。如果要打开某个文件夹视图,只需使用
调用
ShellExecuteExW
,查看\u MASK\u IDLIST
lpIDList=ILCreateFromPath(path)
。无论如何,您不需要
HWND
-您询问的是您(错误)的解决方案实施,而不是您的真正目标您没有解释您的主要目标。获得探险家的
HWND
,你想做什么?@JonathanPotter谢谢你,乔纳森!这在某种程度上帮助了我的黑客行为,但自从发布这篇文章后,我发现了IExplorerBrowser和CLSID_ExplorerBrowser,这让我(至少部分)实现了我的目标:在另一个窗口中嵌入一个explorer窗口。这也回答了Barmak的问题。我想嵌入一个完整的浏览器窗口(没有框架),一旦我找到HWND,它工作得很好,但问题是如何在用户看到它之前获得它,以及如何确保找到正确的窗口。
char cmdLine[MAX_PATH] = "explorer.exe";
STARTUPINFO si;
PROCESS_INFORMATION pi;

CreateProcess(
 NULL,
 cmdLine,
 NULL,
 NULL,
 FALSE,
 0,
 NULL,
 NULL,
 &si,
 &pi
);