C++ 检索Windows资源管理器的句柄';s地址栏编辑控件
我需要检索最活跃的Windows资源管理器实例的完整路径 因此,我通过调用 HWND l_pExplorerhwnd=::GetForegroundWindow() 使用这个句柄,我需要检索它的地址栏编辑控件。 我使用了Spy++并将编辑控件的类名设置为ToolbarWindow32 现在,我已经尝试使用以下代码片段使用FindWindowEx查找窗口。但我无法找回它。请帮忙C++ 检索Windows资源管理器的句柄';s地址栏编辑控件,c++,windows,mfc,explorer,C++,Windows,Mfc,Explorer,我需要检索最活跃的Windows资源管理器实例的完整路径 因此,我通过调用 HWND l_pExplorerhwnd=::GetForegroundWindow() 使用这个句柄,我需要检索它的地址栏编辑控件。 我使用了Spy++并将编辑控件的类名设置为ToolbarWindow32 现在,我已经尝试使用以下代码片段使用FindWindowEx查找窗口。但我无法找回它。请帮忙 HWND l_pExplorerhwnd = ::GetForegroundWindow(); TCHAR l_
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);
}
要直接回答您的问题,
FindWindowEx
作用于父窗口的直接子窗口,而不是子窗口。因此,您需要逐个遍历子对象:
CabinetWClass
WorkerW
ReBarWindow32
Address Band Root
msctls_progress32
Breadcrumb Parent
ToolbarWindow32
请注意,这个层次结构只是我的系统上现在的层次结构。正如Tom Whittock所提到的,使用此选项将是非常糟糕的做法。您不知道窗口层次结构是否会随着更新而改变,甚至不知道运行时的设计是否会改变
关于代码的另一条评论。由于您正在使用TCHAR映射(即使现在通常没有理由使用它,除非您打算支持Win98-),您的字符串文本应该是
\u T(“”
),而不是L”“
永远不要弄乱其他进程窗口层次结构-它们可以随时更改,这很粗鲁。在shdocvw
中有类似于ShellWindowsClass
的API,它们可以满足您的需要,但即使是这样的API也不受欢迎。几乎没有合法的理由去做你想做的事情。也许你可以描述一下你打算用地址栏做什么。也许有更好的办法。(例如,如果您只想知道资源管理器窗口正在查看什么,或者如果您想更改它正在查看的内容,您可以。如果您想将资源管理器合并到您的程序中,那么。)非常感谢。我只是尝试了一下,通过检查SPY++得到了答案。无论如何,非常感谢。