others - c+ + - 在WIN32 API中,监视浏览器窗口

我目前的做法是,在消息循环中调用EnumWindows,并附加到程序的主窗口,资源管理器窗口。


while(GetMessage(&uMsg, NULL, 0, 0) > 0)


{


 TranslateMessage(&uMsg);


 DispatchMessage(&uMsg);


 EnumWindows((WNDENUMPROC)findExplorerWindows, (LPARAM)mainWindow);


}



时间: 原作者:

除了Windows挂钩,你可以使用shell接口,枚举正在运行的文件资源管理器窗口。


#import <shdocvw.dll>



void FindExplorers()


{


 CoInitialize(NULL);



 SHDocVw::IShellWindowsPtr m_spSHWinds;


 m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows));



 CString strCount;


 long nCount = m_spSHWinds->GetCount();



 IDispatchPtr spDisp;


 for (long i = 0; i < nCount; i++)


 { 


 _variant_t va(i, VT_I4);


 spDisp = m_spSHWinds->Item(va);



 SHDocVw::IWebBrowserAppPtr spBrowser(spDisp);


 if (spBrowser != NULL)


 {


 CString locationName = spBrowser->GetFullName();


 if (locationName.MakeLower().Find(L"explorer.exe") >= 0)


 {


 // use the HWND to do something


 spBrowser->HWND;


 }


 }


 }



 CoUninitialize();


}



原作者:
...