2016-07-05 2 views
1

動きに基づいて画像を作成してマウスカーソルの動きを表示するプログラムを作成しようとしました。問題は、アプリケーションでは、フォーカスが合っていない/最小化されている場合でも、マウスの動きを検出して追跡できる必要があることです。すべてのアプリケーションフォームのフォーカスが外れるとカーソル位置を取得

これまでは、グローバルマウスフックなど、さまざまなアプローチを使用しようとしてきました。 MouseMoveイベントのコードは(SP =ポイント、EP =終点を開始)以下である:

private void Form1_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (k == 0) 
     { 
      ep = e.Location; 
      g = this.CreateGraphics(); 
      g.DrawLine(p, sp, ep); 
     } 
     sp = ep; 
    } 

フォームはフォーム上に集束さだけ移動されたときにこのコードのみマウスの動きを追跡するために働きます。フォーム外での動きを追跡する別の方法がありますが、フォームのサイズが変更されたときには動作を停止します。

グローバルマウスフックなどを使用して動きを追跡する適切な方法は何ですか?

+3

あなたの質問とは無関係ですが、おそらく後でサンプルコードに基づいてこれを実行します。あなたが '.CreateGraphics'を呼んでいることが分かったら、おそらく99.9%の間違いをしているでしょう。 –

答えて

1

私は現在自分の携帯電話にいますが、あなたに合ったものを得るために全力を尽くします。

user32.dllクラスからネイティブ関数の1つを呼び出して、これを行うことができます。

[DllImport("user32.dll")] 
private static extern bool GetCursorPos(out Point lpPoint); 

をし、このようにそれを使用します:

は、あなたのクラスでこれを入れてcursorPosは、あなたのマウスのXとYの位置を持っています

public static void Main(string[] args) 
{ 
     Point cursorPos; 
     GetCursorPos(out cursorPos); 
} 

+1

私はあなたが携帯電話のキーボードからそのテキストをフォーマットするために管理した方法でボーナスポイントを与えるでしょう。 –

+1

私はちょうど1つのことに興味があります:WinAPIは[** Cursor.Position' **](https://msdn.microsoft.com/en-us/library/system .windows.forms.cursor.position(v = vs.110).aspx)プロパティ? –

+1

@VisualVincent 2つの理由があります。私は誰もがWinAPI呼び出しに導入されるべきだと思うし、彼はSystem.Windows.Formsを参照することなくどこでもこれを使うことができます:) –

関連する問題