Advertisement
Guest User

Untitled

a guest
Apr 25th, 2013
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.80 KB | None | 0 0
  1. #include "stdafx.h"
  2.  
  3. BOOL CALLBACK EnumDeskProc(HWND hwnd,LPARAM lParam)
  4. {
  5.     TCHAR   buf[100];
  6.  
  7.     ::GetClassName( hwnd, (LPTSTR)&buf, 100 );
  8.     if ( _tcscmp( buf, _T("IEFrame") ) == 0 )
  9.     {
  10.         *(HWND*)lParam = hwnd;
  11.         return FALSE;
  12.     }
  13.     else
  14.         return TRUE;
  15. };
  16.  
  17. BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
  18. {
  19.     TCHAR   buf[100];
  20.  
  21.     ::GetClassName( hwnd, (LPTSTR)&buf, 100 );
  22.     if ( _tcscmp( buf, _T("Internet Explorer_Server") ) == 0 )
  23.     {
  24.         *(HWND*)lParam = hwnd;
  25.         return FALSE;
  26.     }
  27.     else
  28.         return TRUE;
  29. };
  30.  
  31. int _tmain(int argc, _TCHAR* argv[])
  32. {
  33.     HRESULT hr;
  34.     CoInitialize(NULL);
  35.     HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
  36.     printf("hInst:%i\n", hInst);
  37.  
  38.     HWND hWnd;
  39.     EnumDesktopWindows(NULL, EnumDeskProc, (LPARAM)&hWnd);
  40.     printf("hWnd:%i\n", hWnd);
  41.  
  42.     HWND hWndChild=NULL;
  43.     ::EnumChildWindows( hWnd, EnumChildProc, (LPARAM)&hWndChild );
  44.     printf("hWndChild:%p\n", hWndChild);
  45.     if (hWndChild)
  46.     {
  47.         CComPtr<IHTMLDocument2> spDoc;
  48.         LRESULT lRes;
  49.            
  50.         UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
  51.         printf("RegisterWindowMessage:%u\n", nMsg);
  52.         ::SendMessageTimeout( hWndChild, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD_PTR*)&lRes );
  53.        
  54.         LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, "ObjectFromLresult" );
  55.         if (pfObjectFromLresult == NULL)
  56.         {
  57.             printf("GetProcAddress failed\n");
  58.             goto cleanup;
  59.         }
  60.  
  61.         if ( pfObjectFromLresult != NULL )
  62.         {
  63.             hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0, (void**)&spDoc );
  64.             if (FAILED(hr))
  65.             {
  66.                 printf("pfObjectFromLresult failed\n");
  67.                 goto cleanup;
  68.             }
  69.  
  70.             CComPtr<IServiceProvider> spService;
  71.             hr = spDoc->QueryInterface(IID_IServiceProvider, (void **) &spService);
  72.             if (FAILED(hr))
  73.             {
  74.                 printf("QueryInterface IID_IServiceProvider failed\n");
  75.                 goto cleanup;
  76.             }
  77.  
  78.             CComPtr<IWebBrowser2> spBrowser;
  79.             hr = spService->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, (void **) &spBrowser);
  80.             if (FAILED(hr))
  81.             {
  82.                 printf("QueryService IID_IWebBrowser2 failed\n");
  83.                 goto cleanup;
  84.             }
  85.                    
  86.             CComPtr<IHTMLWindow2> spWin;
  87.             hr = spService->QueryService(SID_SHTMLWindow, IID_IHTMLWindow2, (void **) &spWin);
  88.             if (FAILED(hr))
  89.             {
  90.                 printf("QueryService IID_IHTMLWindow2 failed\n");
  91.                 goto cleanup;
  92.             }
  93.                    
  94.             CComPtr<IOmNavigator> spNav;
  95.             hr = spWin->get_navigator(&spNav);
  96.             if (FAILED(hr))
  97.             {
  98.                 printf("get_navigator failed\n");
  99.                 goto cleanup;
  100.             }
  101.  
  102.             BSTR ua;
  103.             hr  = spNav->get_userAgent(&ua);
  104.             if (FAILED(hr))
  105.             {
  106.                 printf("get_appName failed\n");
  107.                 goto cleanup;
  108.             }
  109.             printf("IE user-agent: %S\n", ua);
  110.             ::SysFreeString(ua);
  111.         }
  112.     }
  113.  
  114. cleanup:
  115.     if (FAILED(hr))
  116.     {
  117.         printf("hr:%08X\n", hr);
  118.     }
  119.     ::FreeLibrary(hInst);
  120.     CoUninitialize();
  121.     return 0;
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement