将句柄检索到Windows资源管理器的地址栏编辑控件

时间:2012-04-05 12:37:07

标签: c++ windows mfc explorer

我需要检索大多数活动的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);
  }

1 个答案:

答案 0 :(得分:0)

要直接回答您的问题,FindWindowEx适用于父窗口的直接子项,而不是后代。因此,您需要逐个遍历孩子:

CabinetWClass
WorkerW
ReBarWindow32
Address Band Root
msctls_progress32
Breadcrumb Parent
ToolbarWindow32

请注意,此层次结构仅是我系统上的层次结构。正如Tom Whittock所说,使用它是非常糟糕的做法。您不知道窗口层次结构是否可以在更新中更改,甚至可以在运行时通过设计进行更改。

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

相关问题