Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.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++ 检索Windows资源管理器的句柄';s地址栏编辑控件_C++_Windows_Mfc_Explorer - Fatal编程技术网

C++ 检索Windows资源管理器的句柄';s地址栏编辑控件

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_

我需要检索最活跃的Windows资源管理器实例的完整路径

因此,我通过调用 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);
  }

要直接回答您的问题,
FindWindowEx
作用于父窗口的直接子窗口,而不是子窗口。因此,您需要逐个遍历子对象:

CabinetWClass
WorkerW
ReBarWindow32
Address Band Root
msctls_progress32
Breadcrumb Parent
ToolbarWindow32
请注意,这个层次结构只是我的系统上现在的层次结构。正如Tom Whittock所提到的,使用此选项将是非常糟糕的做法。您不知道窗口层次结构是否会随着更新而改变,甚至不知道运行时的设计是否会改变


关于代码的另一条评论。由于您正在使用TCHAR映射(即使现在通常没有理由使用它,除非您打算支持Win98-),您的字符串文本应该是
\u T(“”
),而不是
L”“

永远不要弄乱其他进程窗口层次结构-它们可以随时更改,这很粗鲁。在
shdocvw
中有类似于
ShellWindowsClass
的API,它们可以满足您的需要,但即使是这样的API也不受欢迎。几乎没有合法的理由去做你想做的事情。也许你可以描述一下你打算用地址栏做什么。也许有更好的办法。(例如,如果您只想知道资源管理器窗口正在查看什么,或者如果您想更改它正在查看的内容,您可以。如果您想将资源管理器合并到您的程序中,那么。)非常感谢。我只是尝试了一下,通过检查SPY++得到了答案。无论如何,非常感谢。