C++を使い、別のアプリケーションを動かすというプログラムを書いているのですが、行き詰ってしまいました。この解決法など良い知恵があればお願いします。

別アプリケーションの『ファイルを開く』ダイアログを開き、そのパス入力スペースに自動でパスを入力し、『開く』をクリックしたと認識させるところまでを行いたいのです。

//ここでファイルを開くダイアログを表示させています。
SendMessage(hWnd,WM_COMMAND,32797,NULL);

☆//ファイルを開く
hWndOpen = FindWindow(NULL, "ファイルを開く");
//ファイルのパス入力

hWndOpenCBE32 =FindWindowEx(hWndOpen , NULL, "ComboBoxEx32" , NULL);
hWndOpenCB =FindWindowEx(hWndOpenCBE32 , NULL, "ComboBox" , NULL);
hWndOpenEdit =FindWindowEx(hWndOpenCB , NULL, "Edit" , NULL);//パスを入力するところ
SendMessage(hWndOpenEdit, WM_SETTEXT, 0, (LPARAM)"aaa.txt");


『ファイルを開く』のウィンドウが開くところまではいきました。それから先がうまくいきません。

確認として、『ファイルを開く』がすでに表示されている状態で☆部分以降の処理を行うと、うまくとおります。SendMessage(hWnd,WM_COMMAND,32797,NULL);で自動的に『ファイルを開く』ウィンドウを開いてそのまま自動的にパスを入力→開く の動作がうまくいかないのです。

A 回答 (2件)

うまく行かない場合の、hWndOpenに入る返り値なんかはどうなっているのでしょう?




別プログラムが処理する事ですから、メッセージを投げてすぐに「ファイルを開く」ウィンドウが表示されるとは限らないのでは。

☆のところの処理の前に、
sleepなんかでちょっと待つとか。
一定時間ごとに繰り返し、ある程度の時間が経過した場合に見つからなかったって処理するとか。
    • good
    • 0

SendMessageでファイルを開くコマンドを送っているようですが、SendMessageはメッセージを送られた側がそのメッセージの処理を終了した後に呼び出し元に戻ってきます。

対象のアプリケーションのコマンドはファイルを開くダイアログが終了するまで処理を返さないのではありませんか?
デバッガを使って、別アプリケーションのどこまで操作が終わったらSendMessageの次の処理に入るかを確認した方がよいと思います。

別アプリケーションを動かす場合、そのアプリケーションの構造を知らずやってもうまくいかないことが多いと思います。
SendMessageでコマンドを送るのではなく、キー入力等を送ってユーザインタフェースを操作することをお勧めします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング