- PR -

C# 割り込み信号をプログラムで送りたい

1
投稿者投稿内容
マーライオン
会議室デビュー日: 2005/01/13
投稿数: 17
お住まい・勤務地: 東京都五反田
投稿日時: 2005-03-18 14:21
アクティブなウィンドウに対してプログラムからキーボードのキー入力を送るプログラムを作りたいのですが、Win32 APIのSendInput関数やSendKeyクラスのsendメソッドなどを使用してキーを送っても反応がありませんでした。
送った後、Application.Doevents()やSystem.Threading.Thread.Sleep(1000)としてみた
のですがそれでもだめでした。
直接キーボードからキーを押すと問題なく動くので思ったのですが、プログラムでキーボードから送られるような割り込み信号を作ることは難しいでしょうか?
最終的にはアクティブなウィンドウに対してプログラムからキーを送ってそれに対応した動きをしてもらえればよいのですがどなたらご教授よろしくお願い致します。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-03-18 14:47
System.Windows.Forms.SendKeysクラスのメソッドで可能ですが。
送る時に、送る先が本当にアクティブになっていますか?
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-03-18 14:53
引用:

マーライオンさんの書き込み (2005-03-18 14:21) より:
直接キーボードからキーを押すと問題なく動くので思ったのですが、プログラムでキーボードから送られるような割り込み信号を作ることは難しいでしょうか?


いや、それは難しいでしょう。カーネルドライバを作るとかの話になってしまいますよ。

SendInputやkeybd_event等のAPIはWM_KEYDOWNやWM_KEYUPといったWindowメッセージを生成することでキー入力をエミュレーションするAPIです。もし対象としているアプリケーションがWindowメッセージを使っていなかった場合、この方法ではキー入力を行うことは出来ないでしょう。

SetKeyBoardState等の、もっと低いレイヤーのAPIでは操作できませんか?・・・と思ったんだけど、このAPIって自分自身のスレッドにしか影響与えないのね・・・。

[ メッセージ編集済み 編集者: 甕星 編集日時 2005-03-18 14:55 ]
マーライオン
会議室デビュー日: 2005/01/13
投稿数: 17
お住まい・勤務地: 東京都五反田
投稿日時: 2005-03-18 14:55
Hongliang様
ご回答ありがとうございます。
SetForegroundWindow(プロセス)でアクティブにしてから送信は行っております。
アクティブなウィンドウというのがタイマー処理のようなもので常に動いている
のでそれが原因でしょうか?
マーライオン
会議室デビュー日: 2005/01/13
投稿数: 17
お住まい・勤務地: 東京都五反田
投稿日時: 2005-03-18 14:58
甕星様
ご回答ありがとうございます。
SetKeyBoardStateというのははじめて聞きました。
一度ためしてみたいと思います^^
マーライオン
会議室デビュー日: 2005/01/13
投稿数: 17
お住まい・勤務地: 東京都五反田
投稿日時: 2005-03-18 15:04
引用:

マーライオンさんの書き込み (2005-03-18 14:58) より:
甕星様
ご回答ありがとうございます。
SetKeyBoardStateというのははじめて聞きました。
一度ためしてみたいと思います^^



すいません、最後まで文をきちんと読んでなかったです><
自分自身のスレッドにしか影響を与えないのですね。
そうしますとWindowメッセージを使っていない場合のアプリケーションに
プログラムでキーを送るのは難しいということですよね。。
1

スキルアップ/キャリアアップ(JOB@IT)