• 締切済み

PostMessageで外部のexeへメッセージを送ったときに不具合が出る

現在、PostMessageを利用して外部のexeへファイル名(フルパス)を送信して、 そのファイルをexeで読み込むようにさせています。 以下、そのプログラムです。 CWnd *hWnd = FindWindow("ConsoleWindowClass", "C:\\WINDOWS\\system32\\cmd.exe"); char str[256]="C://sumple//test.txt\n" int len = 256; for( int i=0; i<len; i++ ){ ____char c; ____c = toupper( str[i] ); ____switch( str[i] ) ____{ ________case '\n': ________c = VK_RETURN; ________break; ____} ____hWnd->PostMessage(WM_KEYDOWN, c, 0 ); } ところが、たとえばファイルパスが"C://sumple//aa.txt\n" のように、同じ文字が連続して存在すると"aa.txt"ではなく"a.txt"として送信されてしまいます。 このような現象にはどう対応すればよいのでしょうか? また、"/"や"."などの記号は"Csumpleaatt\n"のように存在しないとして処理されているようなので case '/': ____hWnd->PostMessage(WM_KEYDOWN, VK_DIVIDE, 0 ); ____break; のように直接仮想キーコードで入力しています。(こちらは上手くいっています) 文字の連続で起こる現象にも使えるかと思って case 'a': ____hWnd->PostMessage(WM_KEYDOWN, 0x41, 0 ); ____break; としてみたのですが、やはり駄目でした。 ファイル名に連続した文字を使わなければいいのでしょうが、汎用性を持たせるためにもどうにか解決したいと思います。 どうかご解答をお願いします。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

WM_KEYDOWN/WM_KEYUPをセットで送るようにしてみてはいかがでしょう

skk004
質問者

お礼

Sleepを入れたら解決しました。 どうもお騒がせしました。 あと、間違えて同じ質問を二度してしまって申し訳ないです・・・ ポイントは二度目の質問と合わせて出させていただきました。

skk004
質問者

補足

セットで送るとはどういうことでしょうか? hWnd->PostMessage(WM_KEYDOWN/WM_KEYUP, c, 0 ); や hWnd->PostMessage(WM_KEYDOWN, c, 0 ); hWnd->PostMessage(WM_KEYUP, c, 0 ); ではないですよね?