• ベストアンサー

visualstudio2008について

visualstudio2008 c++を使って、ダイアログ形式でアプリケーションを作っています。ボタンをクリックしたときに外部アプリケーションを起動してボタンを操作したいのですが、どうすればよいのでしょうか? アプリケーションの起動までは出来ました。よろしくお願いします。 windows vista

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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" となっているのでしょうか? 普通、「ファイル名 - メモ帳」などのように、実行ファイル名ではなく、プログラムの名称が表示されていると思うのですが・・・。

hidenorihide777
質問者

お礼

回答ありがとうございました。また、丁寧に教えていただきありがとうございました。さっそく試してみたいと思います。

その他の回答 (2)

  • LOHA
  • ベストアンサー率52% (203/388)
回答No.2

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

hidenorihide777
質問者

お礼

回答ありがとうございました。参考にさせていただきたいと思います。

  • LOHA
  • ベストアンサー率52% (203/388)
回答No.1

>外部アプリケーションを起動してボタンを操作したい 外部アプリケーションのボタンを操作したいということですよね。 外部アプリケーションのウィンドウハンドルを取得して、WM_COMMANDあたりに適切な値(ボタンのID)をSendMessageしてやればできそうな気がします(すみません。全く確証はないです)。

hidenorihide777
質問者

補足

回答ありがとうございました. 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); } としてみたのですが,ボタン操作が起こりません.エラーは出ませんでした.どこを修正すればよいのでしょうか?

関連するQ&A