別のアプリにキーイベントを発生させる

解決


as  2003-02-21 01:26:39  No: 2981

https://www.petitmonte.com/bbs/answers?question_id=261
にて、他のアプリにキーイベントを発生させていますが
アクティブフォームに発生してしまいます。

常にメモ帳(たとえば)に入力するようにしたいのですが
どのようにすればいいのでしょうか?

わかる方お願いします。


たかみちえ  URL  2003-02-21 03:15:29  No: 2982

SetForeGroundWindow APIを使えば、アクティブウィンドウをかえられます。
ウィンドウハンドルを得るには、FindWindowなどのAPIを使いましょう。


as  2003-02-21 03:25:54  No: 2983

たかみちえ様レスありがとうございます。

説明が悪かったみたいです。
アクティブであろうと非アクティブであろうと
メモ帳にイベントを発生させたいのです。

ハンドルを取得することはわかりますが、
keybd_event関数でどのように指定すればいいのかがよくわかりません。

わかってもらえたら嬉しいです(^^;


にしの  2003-02-21 07:06:27  No: 2984

keybd_eventは、面倒なWM_KEYDOWN,WM_KEYUP,WM_CHAR,WM_SYSCOMMANDなどのイベントを、簡単に送出するためのものと考えてください。
もし、アクティブでないウィンドウに対してキーを送るのであれば、これらのメッセージを正しい組み合わせ(順番)で送ればできるはずです。
Spy++やWinSightなどでメッセージがどう送られるか見られます。


おえい  2003-02-21 07:23:40  No: 2985

begin
   //***は目的のハンドル、今回の場合はFindWindowでNotepadのハンドルを得る
   if *** <> 0 then
   //目的のアプリを前面に出しアクティブにする 
   SetForeGroundWindow(***);
   //←キーを押す放す
     begin
       //API仮想キーコード参照
       keybd_event(VK_LEFT,0,0,0);
       keybd_event(VK_LEFT,0,KEYEVENTF_KEYUP,0);
     end;
end;

でメモ帳にキーを送っていると思いますが。
常にキーを監視してメモ帳に送りたいということでしょうか?
それならフックをする方法しか思い浮かびませんが?


as  2003-02-22 00:06:43  No: 2986

レスありがとうございます。

にしの様
>keybd_eventは、面倒なWM_KEYDOWN,WM_KEYUP,WM_CHAR,WM_SYSCOMMANDなどのイベントを、簡単に送出するためのものと考えてください。

WM_KEYDOWN,WM_KEYUPはわかるのですが
WM_CHAR,WM_SYSCOMMANDがどのように使うのかわかりません。

>これらのメッセージを正しい組み合わせ(順番)で送ればできるはずです。

WM_KEYDOWNとWM_KEYUPだけでは、出来ないってことなのですね?
引数で渡してあげれば出来るのだと思ってました;;

おえい様
>   //目的のアプリを前面に出しアクティブにする 

非アクティブだった場合には非アクティブのままで
メモ帳にキーイベントを発生させたいのです。

>常にキーを監視してメモ帳に送りたいということでしょうか?
常にってことではないのですが、監視してメモ帳に送りたいのです。

>それならフックをする方法しか思い浮かびませんが?

フック?
始めたばかりなので、よくわからないので
出来たらサンプルがあると嬉しいです。

わがままいってすいませんが、よろしくお願いしますです。


あs  2003-02-22 02:03:08  No: 2987

何も調べないで、聞くのはよくないですね。
すいませんでした。

WM_KEYDOWN,WM_KEYUP,WM_CHAR
を使うことにより出来ました。

WM_SYSCOMMANDは今回は必要ないみたいです。


as  2003-02-22 02:04:37  No: 2988

名前が・・・

上の発言は同一人物です。

すいませんでした。


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

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






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