C#またはC ++を使用してマウスとキーボードをシミュレートするにはどうすればよいですか?


8

Kinectの開発を開始したいのですが、最も難しいテーマは、キーボードとマウスの入力を任意のアプリケーションに送信する方法です。前の質問で、このデバイス用に独自のドライバーを開発するようアドバイスを受けましたが、これにはしばらく時間がかかります。

SendMessageをシステム全体の入力に変換できるゲートのようなアプリケーション、またはこの入力を送信するAPIを備えたドライバーアプリケーションを想像します。では、C#やC ++とやり取りできるドライバーやシミュレーターはあるのでしょうか。

小規模版:SendMessage、PostMessage、keybd_eventは、共通のメッセージループを持つWindowsアプリケーションでのみ機能します。したがって、低レベル、カーネル、レベルで機能するドライバーアプリケーションが必要です。


別のアプリケーションへのキーの押下などをシミュレートするAuto Hot Keyのようなソフトウェアに興味を持っているように聞こえるかもしれませんが、完全にはわかりません。
ジェームズ

2
実際のキーボードをシミュレートするAPIを備えたドライバー。
Dracontis

StackOverflowの方が運がいいかもしれませんが、この質問はおそらくより低レベルであり、ここにいる大多数のユーザーは経験を積んでいます。私は間違っているかもしれません。
deceleratedcaviar

StackOverflowについて質問できません。
Dracontis

何故なの?Stackoverflowは、このような質問を投稿するのに最適な場所です。
ultifinitus 2011年

回答:


2

C#アプリケーションの場合:

マウスを移動するには、Cursorクラスは、Cursor.Positionを使用してマウスを移動できるためが私たちの友人です。

キー押下をシミュレートするために、Sendkeysクラスはあなたの友達です。SendKeys.Send()を使用してキーボードプレスをシミュレートします

マウスをクリックするために、私は素晴らしいラッパーを知らないが、このコードはうまくいくはずです:

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

public const int MOUSEEVENTF_LEFTDOWN = 0x02;
public const int MOUSEEVENTF_LEFTUP = 0x04;
public const int MOUSEEVENTF_RIGHTDOWN = 0x08;
public const int MOUSEEVENTF_RIGHTUP = 0x10;

public void MouseClick()
{
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
}

(おそらくCursorクラスを再度使用して、xとyを実際のマウス位置に置き換えるだけです)

または、CodeProjectのGlobal Mouse and Keyboard Libraryなどを使用して、プロセス全体へのシンプルでクリーンなインターフェースを実現できます。


1
残念ながら、これはDirectInput / XInputアプリケーションでは機能しません。
ジョナサンディキンソン

イベントはすべてのアプリケーションで機能するわけではありません。たぶん、ゲームが共通のメッセージループに接続され、このライブラリまたは関数が機能することもありますが、すべての機能で機能するわけではありません。ドライバーのようなアプリケーションが必要です。
Dracontis

2

必要なのは、ヒューマンインターフェイスデバイスHIDのシステムドライバーを作成することです。お気づきのように、イベントをより高いレベルのシステムに詰め込んで普遍的なカバレッジを取得することはできないので、ドライバーを作成する前のアドバイスは正しいです。

ここから始めたいかもしれません:ここにリンクの説明を入力してから、MSDNを調べて、作業のベースとなるドライバーサンプルを探してください。


1
また、SendMessageアプローチを使用する場合、マニフェストでUIAccess = trueが必要であり、Adminとして起動されたアプリケーションと対話する必要があることも付け加えておきます。そのためには、コードにデジタル署名(高価)する必要があります。デバイスドライバーを作成する方が適切なソリューションですが、x64で署名されたドライバーも必要です。
NtscCobalt 2012年

1

まあ、そのようなことをする最善の方法は、WDKを使用して独自のキーボード/マウスドライバーを作成することです。これは正確で見栄えの良いソリューションですが、プログラミングの初心者にはかなりの時間がかかります。

その他の解決策は、GlovePIEを使用することです。独自のスクリプトを書き留めて使用することができます。したがって、アプリケーションと一緒にメッセージをGlovePIEに送信する必要があります。これにより、カーネルレベルで入力が生成されるため、DirectXゲームやメッセージループアプリケーションで機能します。

まあ、本当に私はこのようなものを望んでいますが、バックグラウンドプロセスとして実行する可能性(GlovePIEはウィンドウモードで開始してから、それを有効にすることができます)またはライブラリとして実行できます。他に見つけた場合は、回答を更新します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.