【发布时间】:2012-04-05 12:37:06
【问题描述】:
我需要检索最活跃的 Windows Explorer 实例的完整路径。
所以我通过调用来获得 Explorer.exe 的句柄 HWND l_pExplorerhwnd = ::GetForegroundWindow();
使用检索到的这个句柄,我需要检索它的地址栏编辑控件。 我使用了 Spy++ 并获得了编辑控件的类名 ToolbarWindow32
现在,我尝试使用 FindWindowEx 使用以下代码 sn-p 查找窗口。但我无法找回它。请帮忙
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);
}
【问题讨论】:
-
永远永远不要与其他进程窗口层次结构混淆 - 它们可以随时更改,这很粗鲁。
shdocvw中的ShellWindowsClass之类的 API 可能会满足您的需求,但即使是这种事情也令人不悦。几乎没有正当理由去做你想做的事。 -
也许你可以描述一下你打算用地址栏做什么。也许有更好的方法。 (例如,如果您只想知道资源管理器窗口正在查看什么,或者如果您想更改它正在查看的内容,您可以use the automation interface。如果您想将资源管理器合并到您的程序中,那么use the ExplorerBrowser object。 )