2012-03-24 6 views
0

Meine .NET-Anwendung erfasst erkennt die Bewegung eines bestimmten Typs von Objekt von Webcam. Ich bin in der Lage, die Bewegung der Maus in meiner Form zu steuern, indem ich die Bewegung des Objekts umsetze. Ich möchte jedoch die Mausbewegung außerhalb meiner Form steuern, wie eine Art virtuelle Maus.Bewegungserkennung von Webcam zu Mauszeiger steuern mit .NET

Was wäre die beste Technik, um dies zu erreichen?

Antwort

0

Klick auszuführen und Cursor außerhalb der Form durch den Code bewegen:

[DllImport("user32.dll")] 
static extern void mouse_event(int flags, int dX, int dY, int buttons, int extraInfo); 
#region mouseConstants 
const int MOUSE_MOVE = 0x00000001; 
const int MOUSE_LEFTDOWN = 0x00000002; 
const int MOUSE_LEFTUP = 0x00000004; 
const int MOUSE_RIGHTDOWN = 0x00000008; 
const int MOUSE_RIGHTUP = 0x00000010; 
const int MOUSE_MIDDLEDOWN = 0x00000020; 
const int MOUSE_MIDDLEUP = 0x00000040; 
const int MOUSE_WHEEL = 0x00000800; 
const int MOUSE_ABSOLUTE = 0x00008000; 
#endregion 

private void performClick(int posX, int posY) 
{ 
    Cursor.Position = new Point(posX, posY); // to move the cursor at desired position 
    mouse_event(MOUSE_LEFTDOWN, 0, 0, 0, 0); // to perform left mouse down 
    mouse_event(MOUSE_LEFTUP, 0, 0, 0, 0); // to perform left mouse up 
} 
2

könnten Sie versuchen, diese Anrufe API über Win zu erreichen:

[DllImport("user32.dll")] 
static extern bool SetCursorPos(int X, int Y); 

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

Point current; 
GetCursorPos(out current); 
SetCursorPos(current.X + 10, current.Y + 10); 

Diese außerhalb der Anwendung funktionieren würde.

+0

Danke .. Ich habe gerade herausgefunden, dass es auch möglich ist, Mausereignisse mit user32.dll zu steuern – Naveen

1

In C#:

//using System.Windows.Forms; 
//using System.Drawing; 
Cursor.Position = new Point(x, y); 

Oder wenn Sie die Maus zu bewegen, anstatt positionieren:

//using System.Windows.Forms; 
//using System.Drawing; 
Cursor.Position = Cursor.Position + new Size(deltaX, deltaY); 
+0

Danke .... Ist es auch möglich, einen Klick oder einen Doppelklick außerhalb des Formulars über den Code auszuführen ??? – Naveen

+0

@Naveeen: Ja, aber es ist viel komplizierter. Hier ist ein gutes Beispiel: http://www.codeproject.com/Articles/28064/Global-Mouse-and-Keyboard-Library –