Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- BOOL CALLBACK EnumDeskProc(HWND hwnd,LPARAM lParam)
- {
- TCHAR buf[100];
- ::GetClassName( hwnd, (LPTSTR)&buf, 100 );
- if ( _tcscmp( buf, _T("IEFrame") ) == 0 )
- {
- *(HWND*)lParam = hwnd;
- return FALSE;
- }
- else
- return TRUE;
- };
- BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
- {
- TCHAR buf[100];
- ::GetClassName( hwnd, (LPTSTR)&buf, 100 );
- if ( _tcscmp( buf, _T("Internet Explorer_Server") ) == 0 )
- {
- *(HWND*)lParam = hwnd;
- return FALSE;
- }
- else
- return TRUE;
- };
- int _tmain(int argc, _TCHAR* argv[])
- {
- HRESULT hr;
- CoInitialize(NULL);
- HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
- printf("hInst:%i\n", hInst);
- HWND hWnd;
- EnumDesktopWindows(NULL, EnumDeskProc, (LPARAM)&hWnd);
- printf("hWnd:%i\n", hWnd);
- HWND hWndChild=NULL;
- ::EnumChildWindows( hWnd, EnumChildProc, (LPARAM)&hWndChild );
- printf("hWndChild:%p\n", hWndChild);
- if (hWndChild)
- {
- CComPtr<IHTMLDocument2> spDoc;
- LRESULT lRes;
- UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
- printf("RegisterWindowMessage:%u\n", nMsg);
- ::SendMessageTimeout( hWndChild, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD_PTR*)&lRes );
- LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, "ObjectFromLresult" );
- if (pfObjectFromLresult == NULL)
- {
- printf("GetProcAddress failed\n");
- goto cleanup;
- }
- if ( pfObjectFromLresult != NULL )
- {
- hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0, (void**)&spDoc );
- if (FAILED(hr))
- {
- printf("pfObjectFromLresult failed\n");
- goto cleanup;
- }
- CComPtr<IServiceProvider> spService;
- hr = spDoc->QueryInterface(IID_IServiceProvider, (void **) &spService);
- if (FAILED(hr))
- {
- printf("QueryInterface IID_IServiceProvider failed\n");
- goto cleanup;
- }
- CComPtr<IWebBrowser2> spBrowser;
- hr = spService->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, (void **) &spBrowser);
- if (FAILED(hr))
- {
- printf("QueryService IID_IWebBrowser2 failed\n");
- goto cleanup;
- }
- CComPtr<IHTMLWindow2> spWin;
- hr = spService->QueryService(SID_SHTMLWindow, IID_IHTMLWindow2, (void **) &spWin);
- if (FAILED(hr))
- {
- printf("QueryService IID_IHTMLWindow2 failed\n");
- goto cleanup;
- }
- CComPtr<IOmNavigator> spNav;
- hr = spWin->get_navigator(&spNav);
- if (FAILED(hr))
- {
- printf("get_navigator failed\n");
- goto cleanup;
- }
- BSTR ua;
- hr = spNav->get_userAgent(&ua);
- if (FAILED(hr))
- {
- printf("get_appName failed\n");
- goto cleanup;
- }
- printf("IE user-agent: %S\n", ua);
- ::SysFreeString(ua);
- }
- }
- cleanup:
- if (FAILED(hr))
- {
- printf("hr:%08X\n", hr);
- }
- ::FreeLibrary(hInst);
- CoUninitialize();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement