プログラムでキーボードを操作するには?


kery  2007-08-11 10:00:17  No: 137149

SendMessageなどでキー入力を送信しても良いのですが、
JoyToKeyのようにメッセージを送る対象を指定せずにキー入力を送信する方法を探しています。

現在キー入力の対象としているアプリケーションがSendMessageなどの送信を全て無効にしているようなのです。
しかしなぜか ジョイパッド→JoyToKey→キー入力 という方法で入力できているので何か方法があるのかと思い質問させていただきました。
また同様にマウス入力でもプログラムからマウスポインタを移動できないのですが、JoyToKeyを使用すると正常に操作することができます。

環境は WinXPSP2, VB.NET2005 です。
宜しくお願いします。


ヤマ@文系  2007-08-14 01:14:07  No: 137150

JoyToKeyはDirectX使っているようですよ。
なのでDirectInputを使ってみたらいかがでしょうか?


kery  2007-08-14 08:17:17  No: 137151

ヤマさん返信有難う御座います。

DirectInputでキー入力出来るのでしょうか?
パッドからの入力の取得しかできないと記憶していますが・・・


ファイト  2007-08-17 19:37:26  No: 137152

keybd_eventを調べられたら?


ファイト  2007-08-17 19:42:27  No: 137153

>現在キー入力の対象としているアプリケーションがSendMessageなどの送信
>を全て無効にしているようなのです。

ごめんなさい。
keybd_eventも無効化対策されてるかもです。
一度確かめてください。


kery  2007-08-18 08:32:22  No: 137154

ファイトさん返信有難う御座います。

keybd_eventもSendMessageを使っているようなので反応がありませんでした。


K.J.K.  2007-08-18 18:24:55  No: 137155

keybd_eventやSendInputと、SendMessageなどでは作用しているところ
が全く異なります。少なくともkeybd_eventは(ドライバが必要として
いるのない限り)SendMessageを内部で使うことがありませんし。

で、まぁ、独自にMouse入力やKey入力をPollingするものだと、入力を
偽装するAPI関数のkeybd_eventなどを用いても反応しようがありません。
これはDirectInputを使う/使わずに関係なく、です。
# DirectInputを使わない場合は、GetAsyncKeyStateやGetKeyboardState
# で特定の入力デバイスの状態を把握できますし。

一般的には入力デバイスそのものとして偽装されているものを使う
しかないのでは。


kery  2007-08-18 20:00:29  No: 137156

K.J.K.さんご回答有難う御座います。

つまり仮想的な入力デバイスのドライバみたいなものを作って外部からの入力に見せかける、ということでしょうか?解釈が間違っていたらすいません。

しかし、そこまで行くと開発できそうにありませんね・・・


ファイト  2007-08-18 20:08:40  No: 137157

やっぱり対策されていましたか。
残念ですね。私も同様の経験をして、随分苦労しました。

K.J.Kさんのおっしゃる通りです。
>一般的には入力デバイスそのものとして偽装されているものを使う
>しかないのでは。

但し私の場合には、「入力デバイスとして正式に認められている2つ
目のUSBキーボード」を利用しています。

詳細はハードの範疇になり板違いなので簡単に紹介します。
1.キー送信したいタイミングでRS-232Cのポートからコマンド送信
2.シリパラ変換ユニットでコマンド受信(ユニット=\10K程度)
3.パラレル出力(接点出力)をキーボード接点に接続
4.PCにとっては、正規にキーボードが押されたのと同様。

前提として、10mSec程度の誤差が許容できるのならですが。

また\10K程度のシリパラ変換ユニットではパラレル出力が10点程度
しかありませんから、送りたいキーも当然10点程度の限定となりま
す。


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

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






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