初心者です。よろしくお願いいたします。
VBAで作成した、ラジオボタンにチェックする動作をC++で
実現したいと考えています。
下記のプログラムは、VBAプログラムです。
動作させるとラジオボタンをチェックします。
-------------------------------
Set objIE = CreateObject("InternetExplorer.application")
For Each objITEM In objIE.document.all
If objITEM.tagName = "INPUT" Then
If objITEM.Value = "1" Then
objITEM.Click
Exit For
End If
End If
Next
-------------------------------
C++で表現するとどのようになりますか。
調査した結果、mshtml.tlbを使用することで実現できると考えて
おりますが、ラジオボタンの操作するプログラムの記述がわからない
でいます。
よろしくお願いいたします。
開発環境は、Windows Xp, VC++.netです。
参考にしてみてください。
http://www.ujasiri.com/prglib/vc/ie/vc_ie.html
ここ一週間、試行錯誤してみたのですが、ラジオボタンの制御ができません。
Formの場合、
MSHTML::IHTMLFormElementPtr ppvForm;ですが、
ラジオボタンの場合、わからないです。
どの型で宣言すれば良いでしょうか。
調べ方も教えていただけないでしょうか。
ラジオボタンってinputですよね?
> If objITEM.tagName = "INPUT" Then
だったら
http://www.ujasiri.com/prglib/vc/ie/vc_ie_ClickButton.html
と同じようできませんか?
サンプル)
// Google検索する
#include <windows.h>
#include <comdef.h>
#import "shdocvw.dll" rename( "FindText", "FindTextIE" )
#import "mshtml.tlb" rename( "TranslateAccelerator", "TranslateAcceleratorHTML" )
HRESULT GoogleSearch( LPCTSTR searchword )
{
HRESULT hr;
hr = ::CoInitialize( NULL );
if ( FAILED( hr ) ) return hr;
try
{
SHDocVw::IWebBrowser2Ptr pBrowser;
// IEを立ち上げ、Googleの検索ページを表示
hr = pBrowser.CreateInstance( __uuidof( SHDocVw::InternetExplorer ) );
if ( FAILED( hr ) ) _com_issue_error( hr );
pBrowser->Visible = VARIANT_TRUE;
pBrowser->Navigate( _bstr_t( L"http://www.google.co.jp/" ) );
// ページが表示されるまで待つ
while ( pBrowser->Busy == VARIANT_TRUE ||
pBrowser->ReadyState != READYSTATE_COMPLETE )
::Sleep( 100 );
MSHTML::IHTMLDocument3Ptr pDocument( pBrowser->Document );
MSHTML::IHTMLElementCollectionPtr pCollection;
// 検索文字列を設定
pCollection = pDocument->getElementsByName( _bstr_t( L"q" ) );
MSHTML::IHTMLInputTextElementPtr pText( pCollection->item() );
pText->value = _bstr_t( searchword );
// ※ラジオボタンの操作
// 日本語のページから検索を選択(2番目のボタン)
pCollection = pDocument->getElementsByName( _bstr_t( L"lr" ) );
MSHTML::DispIHTMLInputButtonElementPtr pButton( pCollection->item( 1 ) );
pButton->click();
// ウェブ検索ボタンを押す(Submit)
pCollection = pDocument->getElementsByName( _bstr_t( L"f" ) );
MSHTML::IHTMLFormElementPtr pForm( pCollection->item() );
pForm->submit();
// ページが表示されるまで待つ
while ( pBrowser->Busy == VARIANT_TRUE ||
pBrowser->ReadyState != READYSTATE_COMPLETE )
::Sleep( 100 );
//pBrowser->Quit();
}
catch ( _com_error& e )
{
hr = e.Error();
}
::CoUninitialize();
return hr;
}
int main()
{
GoogleSearch( TEXT( "IWebBrowser2Ptr" ) );
return 0;
}
> MSHTML::DispIHTMLInputButtonElementPtr pButton( pCollection->item( 1 ) );
ですが、VC2005でコンパイルしたときは問題なかったので気づきませんでしたが、
VC6でコンパイルしたところ、_variant_t型の値を渡さなければダメなことがわかりました。
ですので、
インデックスの場合
MSHTML::DispIHTMLInputButtonElementPtr pButton( pCollection->item( _variant_t( 1L ) ) );
名前の場合
MSHTML::DispIHTMLInputButtonElementPtr pButton( pCollection->item( _variant_t( L"il" ) ) );
とします。
Blueさん、ありがとうございます
ご教示いただいた方法でうまくいきました。
Blueさん、ありがとうございます
ご教示いただいた方法でうまくいきました。
Blueさん、ありがとうございます
ご教示いただいた方法でうまくいきました。
ツイート | ![]() |