IE7のダウンロードダイアログの保存ボタンへのメッセージ送信について – プログラミング – Home

IE7のダウンロードダイアログの保存ボ...
 
通知
すべてクリア

[解決済] IE7のダウンロードダイアログの保存ボタンへのメッセージ送信について


DIO
 DIO
(@DIO)
ゲスト
結合: 18年前
投稿: 62
Topic starter  

WinXP pro IE7 VS2005 MFC

Macafee VirusScanインストール

こんにちは。

今、IE6で動いていたツールがIE7で動作せず困っています。

このツールはあるWEBページにあるCSVをダウンロードするのですが、

このWEBページは「https+電子証明書+認証カード+ActiveX?」が必要なため、

直接セッションの張るのをあきらめ、IEを外部から操作して

ダウンロードしています。

方法は、IEでダウンロードするときに表示される

「ダウンロードダイアログ」などのウインドウハンドルを見つけ、

各ボタンコントロールなどにクリックメッセージ等を送り、

人間が操作するのと同じ操作を再現するような形で、

実現しています。

現在、IE7ではCSVファイルをダウンロードするのか、

保存させるのかを選択させる「ダウンロードダイアログ」の

「保存ボタン」のウインドウハンドルを取得するところまではできています。

しかし、

 (返り値はtrue)::PostMessage( /*「保存ボタン」のウインドウハンドル*/,
BM_CLICK, 0, 0 )

 

としてもクリック操作が行われず、先に進めません。

IE7だからなのか?そのほかの原因かは正確にはわかりませんが、

IE6では動作しています。

お力添えをお願いいたします。

--- 以下コード ----------------------------------------------------------------

/*_T(IE起動)*/

HRESULT hr = ::CoInitialize( NULL );

hr = pIE.CreateInstance( _T(InternetExplorer.Application) );

if( FAILED( hr ) ){

theApp.msg_error( _T(IE失敗));

return m_stepCount;

}

hr = pIE->put_Visible(true);

/*認証OK*/

/*ファイルのダウンロード*/

//URLを開く

COleVariant oleURL;

oleURL.SetString( ダウンロードしたいURL, VT_BSTR );

hr = pIE->Navigate2( oleURL );

if( FAILED( hr ) ){

buf.Format(_T(ファイルダウンロード失敗(Ooen URL Error)));

theApp.msg_error(buf);

return m_stepCount;

}

this->SetProgPos();

//ページ表示完了を待つ

VARIANT_BOOL pBusy;

CWnd* pWndDlDlg = NULL;

Sleep(1000);

do{

hr = pIE->get_Busy( &pBusy );

if( FAILED( hr ) ){

buf.Format(_T(ファイルダウンロード失敗(Time Out Error)));

theApp.msg_error(buf);

return m_stepCount;

}

//ダウンロードダイアログの検出

pWndDlDlg = CWnd::FindWindow( NULL, _T(ファイルのダウンロード) );

if( pWndDlDlg ){

#pragma warning ( disable: 4312 )

if( pWndDlDlg->GetParent()->m_hWnd == reinterpret_cast<HWND>(
pIE->GetHWND() ) ){

break;

}

#pragma warning ( default: 4312 )

}

this->SetActiveWindow();

this->SetForegroundWindow();

pWndDlDlg = NULL;

Sleep(500);

}while( pBusy == VARIANT_TRUE );


引用未解決
トピックタグ
DIO
 DIO
(@DIO)
ゲスト
結合: 18年前
投稿: 62
Topic starter  

//ソースの続き
//ダウンロードダイアログの検出の確認

if( !pWndDlDlg ){

buf.Format(_T(ファイルダウンロード失敗(Do Not Start Download File Error)));

theApp.msg_error(buf);

return m_stepCount;

}

//保存ボタンハンドル取得 Time Out : 5sec

HWND hBtn = NULL;

for( int idx = 0; idx < 10 * 5/*sec*/; idx++ ){

hBtn = ::GetDlgItem( pWndDlDlg->m_hWnd, 0x1148 );

if( hBtn ){ break;}

Sleep( 100 );

}

//保存ボタンハンドル取得確認

if( !hBtn ){

buf.Format(_T(ファイルダウンロード失敗(Do Not Get Save Button Handle Error)));

theApp.msg_error(buf);

return m_stepCount;

}

//保存ボタン押下 Time Out : 30sec

HWND hBtnPostChk = NULL;

for( int idx = 0; idx < 2 * 30/*sec*/; idx++ ){

::SetActiveWindow( pWndDlDlg->m_hWnd );

::SetForegroundWindow( pWndDlDlg->m_hWnd );

::SetFocus( pWndDlDlg->m_hWnd );

Sleep( 400 );

if( !::PostMessage( hBtn, BM_CLICK, 0, 0 ) ){

//ココは通らない

TCHAR cBuf[1024];

CToolKit::GetFormatMessage( ::GetLastError(), cBuf, 1024);

buf.Format(_T(保存ボタンクリックメッセージ送信失敗[%s]), cBuf );

theApp.msg_debug(buf);

}

//保存ボタンが消える=ファイルのダウンロードダイアログがひらく

hBtnPostChk = ::FindWindowEx( pWndDlDlg->m_hWnd, NULL, _T(Button), _T(保
存(&S)) );

if( !hBtnPostChk ){

break;

}

Sleep( 100 );

}

//保存ボタン押下確認

if( hBtnPostChk ){

//

// ここで終了する 保存ボタンにクリックメッセージを送っても

// ファイルダウンロードダイアログが消えていない

//

buf.Format(_T(ファイルダウンロード失敗(Do Not Post Click Message To Save
Button Error)));

theApp.msg_error(buf);

return m_stepCount;

}

//ファイルの保存先設定ダイアログハンドル取得 Time Out : 5sec

HWND hFileNameDlg = NULL;

CString title;

for( int idx = 0; idx < 10 * 5/*sec*/; idx++ ){

hFileNameDlg = ::FindWindow( _T(#32770), _T(名前を付けて保存) );

if( hFileNameDlg ){

HWND hPare = ::GetParent( hFileNameDlg );

if( hPare ){

CWnd wndPare;

if( wndPare.Attach( hPare ) ){

wndPare.GetWindowText( title );

wndPare.Detach();

if( title == _T(ファイルのダウンロード) ){

break;//ファイルの保存先設定ダイアログハンドル検出

}

}

}

}

Sleep( 100 );

}

//ファイルの保存先設定ダイアログハンドル取得確認

if( title != _T(ファイルのダウンロード)){

buf.Format(_T(ファイルダウンロード失敗(Do Not Get Download Dialog Handle
Error)));

theApp.msg_error(buf);

return m_stepCount;

}

・・・・・


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

1行おきになってて読みにくいな


返信引用
DIO
 DIO
(@DIO)
ゲスト
結合: 18年前
投稿: 62
Topic starter  

改行が大量に入り、読みにくくなってしまいました。
以下に修正して再投稿いたしましたので、
そちらのほうをご参照ください。

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200902/09020010.txt


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました