非アクティブウィンドウに[Enter]や[Esc]等を送信するには?


あすか  2006-09-02 22:46:02  No: 62900

別プロセス(メモ帳)にキーボードメッセージを送っているのですが

PostMessage(hWnd, WM_KEYDOWN, 0x41, 0x1E0001);//a
PostMessage(hWnd, WM_KEYUP, 0x41, 0xC01E0001);//a
SetForegroundWindow(hWnd);
Sleep(250);
PostMessage(hWnd, WM_KEYDOWN, 0x0D, 0x1C0001);//Enter
PostMessage(hWnd, WM_KEYUP, 0x0D, 0xC01C0001);//Enter

というように一度アクティブにすると正常に
[a],[Enter]
と入力してくれますが、

PostMessage(hWnd, WM_KEYDOWN, 0x41, 0x1E0001);//a
PostMessage(hWnd, WM_KEYUP, 0x41, 0xC01E0001);//a
//SetForegroundWindow(hWnd);
Sleep(250);
PostMessage(hWnd, WM_KEYDOWN, 0x0D, 0x1C0001);//Enter
PostMessage(hWnd, WM_KEYUP, 0x0D, 0xC01C0001);//Enter

のように非アクティブのままだと
[a]
で止ってしまいます。

[Enter]が[Esc]等でも同じ結果になってしまいます。
PostMessageの戻り値はすべて1が返ってきてspy++等で確認しても
メッセージは送信されているようです。

”非アクティブウィンドウ”には[Enter]等は送信できないのでしょうか?
方法があれば教えてください。宜しくお願いします。


ruin  2006-09-07 23:51:05  No: 62901

想像ですが、単にメモ帳が「非アクティブ時はキー入力を受け付けない」という仕様になっているだけの可能性があります。というかそうじゃないと、アクティブなEXCELに入力した文字が裏のメモ帳にも入ってしまって困ったことになります。あくまで想像ですが。

時間があるなら「非アクティブ時もキー入力を受け付けつける簡単なアプリ」を自作して試して見ると良いかと。


あすか  2006-09-08 05:09:44  No: 62902

>アクティブなEXCELに入力した文字が裏のメモ帳にも入ってしまって困ったことになります
それぞれのプロセスのハンドルを指定してメッセージを送信してるのでそういう風にはならないですよね。

やっぱり受け側のプロセスが非アクティブの時に[Enter]とかのメッセージを受け取る許可をしていないとだめなのかな?


ruin  2006-09-09 11:26:05  No: 62903

>アクティブなEXCELに入力した文字が裏のメモ帳にも入って
これはユーザーのキー操作をOSが各アプリに配信することを差していますので、あなたのアプリの
>それぞれのプロセスのハンドルを指定してメッセージを送信
とは別の話です。

>メッセージを受け取る許可をしていないとだめなのかな
はい、私が言いたかったのはまさしくこれです。


ruin  2006-09-09 11:35:25  No: 62904

上の返答じゃあまり役にたたんと思うので補足しとくと、

>メッセージを受け取る許可をしていないとだめなのかな
と思っててさらに調べたいのなら、確かメモ帳はSDIのサンプルアプリケーションとしてMSDNにソース付きで収録されていたはず。それを見れば一応解決する可能性はあるかと(でもMFCの中にまで入って行かないと駄目かな?)。

ただ5年以上前の知識なので、今のMSDNには入ってないかも。


キー  2006-09-19 19:34:57  No: 62905

// ここでメモ帳のウィンドウハンドル指定
::SetFocus(hwnd);

// 仮想キーコードを指定して押し下げ通知(必ず最後は離します)
::keybd_event( VK_A, 0, 0, 0 );
::keybd_event( VK_A, 0, KEYEVENTF_KEYUP, 0 );

のような感じでどうでしょう?


キー  2006-09-19 19:43:54  No: 62906

つい最近似たような質問があったようで
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200607/06070028.txt
こちらの方が回答されている内容も参考になるかも


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加