找不到窗口资源管理器[关闭]

Posted

技术标签:

【中文标题】找不到窗口资源管理器[关闭]【英文标题】:Window Explorer can't be found [closed] 【发布时间】:2013-08-09 09:26:02 【问题描述】:

我在 XP 系统上使用 VC6。我想找到一个标题与“C:\”匹配的窗口,但找不到。 hr 的返回值为 -2147023116。有人可以帮忙吗?

HWND hwnd = FindWindow(NULL, "C:\\");
IWebBrowserApp *pwba;
HWND hwndindex = NULL;
HRESULT hr = pwba->get_HWND((long*)hwndindex);
if (hwnd == hwndindex)

  BOOL found = true;
  blablabla...

【问题讨论】:

您确定窗口标题完全是 C:\ 而不是 Local Disk (C:)?使用 Spy++ 进行确认。有关显示 C:\ 驱动器的 Windows 资源管理器示例,请参见 this screenshot,标题不是 C:\ 如果这是实际代码,我很惊讶它甚至可以运行,因为对于初学者来说,您不会初始化 pwba 指针。 @JoachimPileborg 当然这不是实际的代码。我只是发布了我认为有用的内容。 @ta.speot.is 但我尝试了其他一些文件夹路径。也找不到 【参考方案1】:

下面的代码应该可以工作:

INT iIndex = 1;
HWND hwnd = ::GetWindow( ::GetDesktopWindow(), GW_CHILD | GW_HWNDFIRST );
while( hwnd ) 
  CString sCaption; 
  ::GetWindowText(hwnd, sCaption.GetBuffer(256), 255);
  sCaption.ReleaseBuffer();

  //DWORD dwProcessID = 0L;
  //::GetWindowThreadProcessId(hwnd, &dwProcessID);   

  //CString sExePath;
  //::GetModuleFileName((HMODULE)dwProcessID, sExePath.GetBuffer(MAX_PATH), MAX_PATH);
  //sExePath.ReleaseBuffer();

  if ( sCaption.Find(_T("c:\\")) != -1 )   
        // found you!
  

  hwnd = ::GetWindow( hwnd, GW_HWNDNEXT );

【讨论】:

我添加了你的代码。但它一直在寻找第一个窗口,即使它的标题不是“c:\\”。顺便说一句,iIndex 是干什么用的? iindex 不需要,你可以使用 Spy++ 来检查你的窗口实际在哪里【参考方案2】:
HRESULT hr = pwba->get_HWND((long*)&hwndindex);

问题解决了!我错过了一个重要的“&”

【讨论】:

以上是关于找不到窗口资源管理器[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在我设备的文件资源管理器中找不到我的应用数据[关闭]

用vs2010制作了c#windows窗体程序,但打包时在解决方案资源管理器窗口中找不到解决方案无

打开资源管理器窗口并等待它关闭

alt+f4无法关闭此窗口,如何解决?我说的是快捷键关闭此窗口,不要告诉我点击确定、任务管理器啥的!

卸载应用后,删除安装根目录下的所有文件,提示已在另一进程打开,在资源管理器进程中找不到该程序的解决

VS Code 自定义文件资源管理器窗口颜色主题