0

Leap Motion Controllerを使用して C# Windows アプリケーションを作成しています。私は Windows 8 と Visual Studio 2010 で開発しています。カーソルを移動してクリックをシミュレートするためにSetCursorPosandmouse_eventを使用しています。user32.dll

どのアプリケーションでもカーソルを移動したい。Visual Studio から実行/デバッグすると、アプリケーション自体または Visual Studio でのみ機能します。他のアプリケーションではマウスが動かず、クリックも効かないのですが、実際のマウスでカーソルを動かそうとすると元の位置に戻ってしまいます。スタンドアロンで実行すると、Visual Studio では動かず、マウスは他のアプリケーションの実際のマウスで動かすことができます。

私は使用するこのコードを持っていSetCursorPosますmouse_event

[DllImport("user32.dll")]
public static extern long SetCursorPos(int x, int y);

[DllImport("User32.Dll")]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

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

私のフォーム クラスでは、マウスの位置が 2 つのフィールドに格納されています。aTimerの目盛りで、カーソル位置を設定し、次のように必要なクリックを行います。

if (!frame.Hands.IsEmpty) {
    Hand hand = frame.Hands.Leftmost;
    if (!hand.Fingers.IsEmpty) {
        // Get coordinates...
        SetCursorPos(mousex, mousey);
    }
}
foreach (Gesture gesture : gestures) {
    if (gesture.Type == Gesture.GestureType.TYPESCREENTAP) {
        MouseClick(mousex, mousey);
    }
}

ステートメントはifLeap デバイス用です。座標を取得する手があるときだけ、マウスを動かしたり、他のことをしたいです。

カーソルを移動したり、他のアプリケーションのマウス クリックをシミュレートしたりすることはできますか? もしそうなら、どのように?

4

3 に答える 3

1

はい、「SendInput」関数を使用します。

参照:カーソルを移動しない限り、SendInput はマウス ボタンのクリックを実行しません

また、

http://www.pinvoke.net/default.aspx/user32.sendinput

http://www.pinvoke.net/default.aspx/Structures/INPUT.html

最初のハイパーリンクを修正しました。次のコメントを参照してください。

SendInput 関数を使用する際に考慮すべき点がいくつかあります。

MOUSEEVENTF_ABSOLUTE フラグを指定しない場合、dx および dy (MouseInputData 構造体) は現在のマウス位置に対する相対座標です。MOUSEEVENTF_ABSOLUTE を指定する場合、dx と dy は 0 から 65535 の間の絶対座標です。したがって、x 座標と y 座標がスクリーン座標である場合は、次の関数を使用して dx と dy を計算する必要があります。

http://msdn.microsoft.com/en-us/library/ms646310%28VS.85%29.aspx

于 2013-09-17T12:30:01.990 に答える