***********问题解决后将有高分追加*************
已使用IShellWindows得到了所有Explorer窗口(包括IE及资源管理器,其中IE是指使用IE内核的所有浏览器,包括MYIE、HELP窗口),并用get_Count()得到了这些窗口的数量,之后枚举每一个窗口,并得到其IWebBrowser2指针spBrowser,接着使用spBrowser->GetHWND()得到一个该指针指向的窗口的HWND,但是我反复调试,却只能得到微软IE的窗口的HWND及其类名IEFrame,就是得不到Maxthon(即MYIE2)的HWND,当然也就得不到其所属类的类名了。以下是具体代码,请帮小弟看看是何原因?要说明的是以下代码已完全取得了所有IE窗口,因为我在后面加入代码可再从中取得HTMLDocument2的指针,并将所有IE窗口(包括MYIE)的背景色改变。从GetLastError()返回的信息可见HWND的获取过程也是“顺利完成”的,另外,本人只想使用IShellWindows来得到的IE的所有窗口,不要使用EnumWindows()或FindWindows()这样的方法,原因我就不多说了,否则不算解决问题,总之,以下请在以下代码的基础上找出原因并作也修改,谢谢大家。
***********问题解决后将有高分追加*************
//以下代码是在实际程序中复制和修改而成,主要是为了说明我的实现流程,如果不能调试通过,请自行修正。可能都是一些括号或逗号之类的小问题。 CComPtr< IShellWindows > spShellWin;
HRESULT hr = spShellWin.CoCreateInstance( CLSID_ShellWindows ); //ShellWindows
if ( FAILED ( hr ) )
{
MessageBox(NULL,_T("获取 IShellWindows 接口错误"),_T("提示"),MB_OK);
return;
} long nCount = 0; // 取得浏览器实例个数(资源管理器和IE核心的浏览器)
spShellWin->get_Count( &nCount );
if( 0 == nCount )
{
MessageBox(NULL,_T("没有在运行着的浏览器"),_T("提示"),MB_OK);
return;
} for(int i=0; i<nCount; i++)
{
CComPtr< IDispatch > spDispIE;
hr=spShellWin->Item(CComVariant( (long)i ), &spDispIE );
if ( FAILED ( hr ) ) continue;
CComQIPtr< IWebBrowser2 > spBrowser = spDispIE;
if ( !spBrowser ) continue; //下面是取得类名,但就是无法取得Maxthon的类名,因为无法取得其HWND
TCHAR szClassName[_MAX_PATH];
ZeroMemory(szClassName,_MAX_PATH * sizeof(TCHAR));
HWND hwnd=NULL;
spBrowser->get_HWND(reinterpret_cast<long*>(&hwnd));
LPVOID lpMsgBuf;
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,0,GetLastError(),MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPTSTR)&lpMsgBuf,0,NULL);
MessageBox(NULL,(LPCTSTR)lpMsgBuf,_T("提示"),MB_OK|MB_ICONINFORMATION); if (hwnd==NULL)
{
MessageBox(NULL,_T("无法取得IE窗口HWND"),_T("取HWND错误"),MB_OK);
return;
}
::GetClassName(hwnd,szClassName,_MAX_PATH);
MessageBox(NULL,szClassName,_T("类名"),MB_OK);
}***********问题解决后将有高分追加*************
已使用IShellWindows得到了所有Explorer窗口(包括IE及资源管理器,其中IE是指使用IE内核的所有浏览器,包括MYIE、HELP窗口),并用get_Count()得到了这些窗口的数量,之后枚举每一个窗口,并得到其IWebBrowser2指针spBrowser,接着使用spBrowser->GetHWND()得到一个该指针指向的窗口的HWND,但是我反复调试,却只能得到微软IE的窗口的HWND及其类名IEFrame,就是得不到Maxthon(即MYIE2)的HWND,当然也就得不到其所属类的类名了。以下是具体代码,请帮小弟看看是何原因?要说明的是以下代码已完全取得了所有IE窗口,因为我在后面加入代码可再从中取得HTMLDocument2的指针,并将所有IE窗口(包括MYIE)的背景色改变。从GetLastError()返回的信息可见HWND的获取过程也是“顺利完成”的,另外,本人只想使用IShellWindows来得到的IE的所有窗口,不要使用EnumWindows()或FindWindows()这样的方法,原因我就不多说了,否则不算解决问题,总之,以下请在以下代码的基础上找出原因并作也修改,谢谢大家。
***********问题解决后将有高分追加*************
//以下代码是在实际程序中复制和修改而成,主要是为了说明我的实现流程,如果不能调试通过,请自行修正。可能都是一些括号或逗号之类的小问题。 CComPtr< IShellWindows > spShellWin;
HRESULT hr = spShellWin.CoCreateInstance( CLSID_ShellWindows ); //ShellWindows
if ( FAILED ( hr ) )
{
MessageBox(NULL,_T("获取 IShellWindows 接口错误"),_T("提示"),MB_OK);
return;
} long nCount = 0; // 取得浏览器实例个数(资源管理器和IE核心的浏览器)
spShellWin->get_Count( &nCount );
if( 0 == nCount )
{
MessageBox(NULL,_T("没有在运行着的浏览器"),_T("提示"),MB_OK);
return;
} for(int i=0; i<nCount; i++)
{
CComPtr< IDispatch > spDispIE;
hr=spShellWin->Item(CComVariant( (long)i ), &spDispIE );
if ( FAILED ( hr ) ) continue;
CComQIPtr< IWebBrowser2 > spBrowser = spDispIE;
if ( !spBrowser ) continue; //下面是取得类名,但就是无法取得Maxthon的类名,因为无法取得其HWND
TCHAR szClassName[_MAX_PATH];
ZeroMemory(szClassName,_MAX_PATH * sizeof(TCHAR));
HWND hwnd=NULL;
spBrowser->get_HWND(reinterpret_cast<long*>(&hwnd));
LPVOID lpMsgBuf;
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,0,GetLastError(),MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPTSTR)&lpMsgBuf,0,NULL);
MessageBox(NULL,(LPCTSTR)lpMsgBuf,_T("提示"),MB_OK|MB_ICONINFORMATION); if (hwnd==NULL)
{
MessageBox(NULL,_T("无法取得IE窗口HWND"),_T("取HWND错误"),MB_OK);
return;
}
::GetClassName(hwnd,szClassName,_MAX_PATH);
MessageBox(NULL,szClassName,_T("类名"),MB_OK);
}***********问题解决后将有高分追加*************
解决方案 »
- 新手求助:如何有效使用MSDN???
- 请教:如何以程序的方式选中特定的单选按钮?
- 向CCPROXY代理服务器发送下载网页请求,为什么收到空数据?代理服务器连接已经完全正常。发送请求信息哪错了?谢谢
- 请问这个问题怎么解决?
- 一个编译问题!
- 关于用DLL将算法加入WINDOWS程序的问题
- 字符串处理的问题,谁来帮个忙!
- 请教区分 “目录”与“文件”的函数,及用法。
- HELP!!!谁有通过域名查IP的资料或代码?
- CWnd::WindowProc
- 如何将bmp格式的位图拖入到客户区打开显示
- 为什么包含了winsock2.h还会出issing storage-class or type specifiers
Most computers in U.S. do not have any Chinese input method installed.
Most computers in U.S. do not have any Chinese input method installed.
不过,你可以枚举类名为"Internet Explorer_Server"的窗口,得到HWND 再获得 IWebBrowser2