- ベストアンサー
visualstudio2008について
visualstudio2008 c++を使って、ダイアログ形式でアプリケーションを作っています。ボタンをクリックしたときに外部アプリケーションを起動してボタンを操作したいのですが、どうすればよいのでしょうか? アプリケーションの起動までは出来ました。よろしくお願いします。 windows vista
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ちょっと試してみました。( Jtw32.exe ではなく、別のプログラムで) 私の環境では、 ::SendMessage(hEdit,BM_CLICK,0,0); の前に ::SendMessage(hEdit,WM_SETFOCUS,0,0); を入れないとボタンがクリックされませんでした。 それともう一つ気になるのが、 HWND hWnd = ::FindWindowEx(NULL, NULL, NULL, "Jtw32.exe"); のところなんですが、本当に、ウィンドウのタイトルが "Jtw32.exe" となっているのでしょうか? 普通、「ファイル名 - メモ帳」などのように、実行ファイル名ではなく、プログラムの名称が表示されていると思うのですが・・・。
その他の回答 (2)
- LOHA
- ベストアンサー率52% (203/388)
BM_CLICKはウィンドウがアクティブでないと失敗するらしいので確認してみてください。 http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200505/05050014.txt http://www.winapi-database.com/Message/BM/BM_CLICK.html こんなのも見つけました。 http://www.ne.jp/asahi/hishidama/home/tech/vcpp/clickdlg.html#h2_click
お礼
回答ありがとうございました。参考にさせていただきたいと思います。
- LOHA
- ベストアンサー率52% (203/388)
>外部アプリケーションを起動してボタンを操作したい 外部アプリケーションのボタンを操作したいということですよね。 外部アプリケーションのウィンドウハンドルを取得して、WM_COMMANDあたりに適切な値(ボタンのID)をSendMessageしてやればできそうな気がします(すみません。全く確証はないです)。
補足
回答ありがとうございました. void CMy6Dlg::OnBnClickedButton1() { // TODO: ここにコントロール通知ハンドラ コードを追加します。 HINSTANCE ret = ShellExecute(m_hWnd, "open", "C:\\JDE\\bin\\Jtw32.exe", NULL, NULL, SW_SHOW); HWND hWnd = ::FindWindowEx(NULL, NULL, NULL, "Jtw32.exe"); HWND hEdit = ::GetDlgItem(hWnd, 0x000D05F6); ::SendMessage(hEdit,BM_CLICK,0,0); if (ret <= (HINSTANCE)32) AfxMessageBox("シェル処理ができません.", MB_OK); } としてみたのですが,ボタン操作が起こりません.エラーは出ませんでした.どこを修正すればよいのでしょうか?
お礼
回答ありがとうございました。また、丁寧に教えていただきありがとうございました。さっそく試してみたいと思います。