- - PR -
C# 割り込み信号をプログラムで送りたい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-03-18 14:21
アクティブなウィンドウに対してプログラムからキーボードのキー入力を送るプログラムを作りたいのですが、Win32 APIのSendInput関数やSendKeyクラスのsendメソッドなどを使用してキーを送っても反応がありませんでした。
送った後、Application.Doevents()やSystem.Threading.Thread.Sleep(1000)としてみた のですがそれでもだめでした。 直接キーボードからキーを押すと問題なく動くので思ったのですが、プログラムでキーボードから送られるような割り込み信号を作ることは難しいでしょうか? 最終的にはアクティブなウィンドウに対してプログラムからキーを送ってそれに対応した動きをしてもらえればよいのですがどなたらご教授よろしくお願い致します。 | ||||
|
投稿日時: 2005-03-18 14:47
System.Windows.Forms.SendKeysクラスのメソッドで可能ですが。
送る時に、送る先が本当にアクティブになっていますか? | ||||
|
投稿日時: 2005-03-18 14:53
いや、それは難しいでしょう。カーネルドライバを作るとかの話になってしまいますよ。 SendInputやkeybd_event等のAPIはWM_KEYDOWNやWM_KEYUPといったWindowメッセージを生成することでキー入力をエミュレーションするAPIです。もし対象としているアプリケーションがWindowメッセージを使っていなかった場合、この方法ではキー入力を行うことは出来ないでしょう。 SetKeyBoardState等の、もっと低いレイヤーのAPIでは操作できませんか?・・・と思ったんだけど、このAPIって自分自身のスレッドにしか影響与えないのね・・・。 [ メッセージ編集済み 編集者: 甕星 編集日時 2005-03-18 14:55 ] | ||||
|
投稿日時: 2005-03-18 14:55
Hongliang様
ご回答ありがとうございます。 SetForegroundWindow(プロセス)でアクティブにしてから送信は行っております。 アクティブなウィンドウというのがタイマー処理のようなもので常に動いている のでそれが原因でしょうか? | ||||
|
投稿日時: 2005-03-18 14:58
甕星様
ご回答ありがとうございます。 SetKeyBoardStateというのははじめて聞きました。 一度ためしてみたいと思います^^ | ||||
|
投稿日時: 2005-03-18 15:04
すいません、最後まで文をきちんと読んでなかったです>< 自分自身のスレッドにしか影響を与えないのですね。 そうしますとWindowメッセージを使っていない場合のアプリケーションに プログラムでキーを送るのは難しいということですよね。。 |
1