VC++でIEを操作する

大体こんな感じーというサンプル。
動作は確認してない。

//Internet Explorer操作用タイプライブラリの取り込み
#pragma warning ( disable: 4146 )
#import "C:\WINDOWS\system32\shdocvw.dll" rename("FindText", "FindTextIE")
#import "C:\WINDOWS\system32\mshtml.tlb" rename("TranslateAccelerator","TranslateAcceleratorHTML")
#pragma warning ( default: 4146 )

//IE操作用オブジェクトの宣言
SHDocVw::IWebBrowser2Ptr pIE = NULL;

void IEBusyWait()
{
  if( pIE == NULL ){
    return;
  }

  VARIANT_BOOL bBusy;
  while(1){
    HRESULT hr = pIE->get_Busy(&bBusy);
        if( FAILED( hr ) ){
      // なにかエラーしている
      break;
        }
    if( bBusy == S_OK ){
      break;
    }

    Sleep(1000);
  }
}

void *****::OnOK() 
{
  // COMの初期化
  CoInitialize(NULL);

  HRESULT hr = pIE.CreateInstance(__uuidof(SHDocVw::InternetExplorer));
  if(FAILED(hr)){
    TCHAR str[256];
    wsprintf(str, _T("NewIE#CreateInstance error:%x\n"), hr);
    ::OutputDebugString(str);
    return;
  }

//  pIE->PutVisible(VARIANT_TRUE);  //IEの表示
  pIE->PutVisible(VARIANT_FALSE);  //IEの非表示

  // ログイン
  pIE->Navigate(_T("https://login.yahoo.co.jp/config/login"));
  IEBusyWait();

  //Htmlドキュメントのオブジェクト取得
  MSHTML::IHTMLDocument2Ptr pHtmlDoc;
  pHtmlDoc = pIE->GetDocument();

  //Formsタグのオブジェクトを取得
  MSHTML::IHTMLElementCollectionPtr pHtmlCol = pHtmlDoc->forms;
  
  // "login"というフォームの0番目を指定
  COleVariant data;
  IDispatch *ppvdispForm;
  data.SetString("login_form", VT_BSTR);          
  pHtmlCol->raw_item(data, COleVariant((short)0), &ppvdispForm);  //特定のFormタグのDispatchオブジェクトを取得

  //IHTMLFormElementクラスとFormのDispatchオブジェクトを結合
  MSHTML::IHTMLFormElementPtr ppvForm;
  ppvdispForm->QueryInterface(__uuidof(MSHTML::IHTMLFormElement), (void**)&ppvForm);

  // "username"というInputの0番目を指定
  //Formタグ内のInput(type = "text")へ文字列を格納
  IDispatch *ppvdispText;
  MSHTML::IHTMLInputElementPtr ppvInput;
  data.SetString("username",VT_BSTR);
  ppvForm->raw_item(data, COleVariant((short)0), &ppvdispText);
  ppvdispText->QueryInterface(__uuidof(MSHTML::IHTMLInputElement), (void**)&ppvInput);  //取得したForm内に存在するInputオブジェクトを取得
  ppvInput->value = "username";

  // "password"というInputの0番目を指定
  IDispatch *ppvdispTextPass;
  MSHTML::IHTMLInputElementPtr ppvInputPass;
  data.SetString("passwd",VT_BSTR);
    ppvForm->raw_item(data, COleVariant((short)0), &ppvdispTextPass);
  ppvdispTextPass->QueryInterface(__uuidof(MSHTML::IHTMLInputElement), (void**)&ppvInputPass);
  ppvInputPass->value = "pass";

  // Submit!
  ppvForm->submit();
  IEBusyWait();

  // 後始末 これをしないとアサートしますよ
  pHtmlCol = NULL;

  pHtmlDoc->close();
  pHtmlDoc = NULL;

  if( pIE != NULL ){
      pIE->Quit();
  }
    pIE = NULL;

  // COM解放
    CoUninitialize();
}