我需要检索大多数活动的Windows资源管理器实例的完整路径。
所以我通过调用来获取Explorer.exe的句柄 HWND l_pExplorerhwnd = :: GetForegroundWindow();
使用此句柄检索,我需要检索它的地址栏编辑控件。 我使用过Spy ++并将编辑控件的类名称作为ToolbarWindow32
现在,我尝试使用以下代码片段使用FindWindowEx找到该窗口。但我无法检索它。请帮忙
HWND l_pExplorerhwnd = ::GetForegroundWindow();
TCHAR l_szTempName[MAX_PATH];
if(l_pExplorerhwnd)
{
::GetWindowModuleFileName(l_pExplorerhwnd, l_szTempName, MAX_PATH);
MessageBox(0, l_szTempName, 0, 0);
if(::FindWindowEx(l_pExplorerhwnd, NULL, L"ToolbarWindow32", NULL))
{
::GetWindowText(::FindWindowEx(l_pExplorerhwnd, NULL, L"ToolbarWindow32", NULL), l_szTempName, MAX_PATH);
MessageBox(0, l_szTempName, 0, 0);
}
else
{
MessageBox(0, L"Error Error ", 0, 0);
}
}
else
{
MessageBox(0, L"Error Error Error", 0, 0);
}
答案 0 :(得分:0)
要直接回答您的问题,FindWindowEx
适用于父窗口的直接子项,而不是后代。因此,您需要逐个遍历孩子:
CabinetWClass
WorkerW
ReBarWindow32
Address Band Root
msctls_progress32
Breadcrumb Parent
ToolbarWindow32
请注意,此层次结构仅是我系统上的层次结构。正如Tom Whittock所说,使用它是非常糟糕的做法。您不知道窗口层次结构是否可以在更新中更改,甚至可以在运行时通过设计进行更改。
关于您的代码的另外一条评论。由于您正在使用TCHAR映射(即使您现在通常没有理由使用它,除非您打算支持Win98-),您的字符串文字应该是_T("")
而不是L""
。