5

画面全体でマウスが移動できる場所の境界を変更する小さなユーティリティを作成しようとしています。ここで見つけたグローバル マウス フック ライブラリ(バージョン 1 を使用しています) を使用し、それが生成するイベントからのマウス位置情報を独自の関数に渡します (今のところ動作することを確認するためのテストです)。 .

internal void ProcessMouseEvent(System.Drawing.Point point)
{
    Cursor.Position = new Point(50,50);
}

実行すると、マウスは指定されたポイントに点滅するように見えますが、移動イベントの場合は変更前の場所に即座に戻ります。クリック イベントによって行われた場合にのみ、実際に新しい位置に留まります。

4

2 に答える 2

3

マウスが効率的に移動できる場所を制限するには、cursor.clip を使用する必要があります。ドキュメントはこちらにあります。それはあなたが望むことをはるかに簡単に行うことができ、推奨される方法です.

于 2012-12-28T01:48:52.670 に答える
3

ここでの問題は、フックがマウス メッセージを通知することです。ただし、実際に通知を処理しようとしているアプリケーションによって処理されることを妨げません。したがって、通常どおりに処理され、マウスは行きたい場所に移動します。あなたがする必要があるのは、実際にメッセージが渡されるのをブロックすることです。これには、フックコールバックからゼロ以外の値を返す必要があります。

ライブラリは、フック コールバックの戻り値をいじることを許可していません。手術が必要になります。バギーなので注意。代わりに、このサンプル コードを使用します。このサンプル コールバック メソッドを使用すると、次のようになります。

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) {
    if (nCode >= 0 && MouseMessages.WM_MOUSEMOVE == (MouseMessages)wParam) {
        System.Windows.Forms.Cursor.Position = new Point(50, 50);
        return (IntPtr)1;   // Stop further processing!
    }
    return CallNextHookEx(_hookID, nCode, wParam, lParam);
}

そして、しっかりと固定されていることがわかります。コントロールを取り戻すには、Alt+Tab、Alt+D、E を使用します。

于 2016-10-15T00:38:40.477 に答える