| 

.NET C# Java Javascript Exception

1
Hallo,
ich bin gerade dabei einen Testplan mit dem UI Automation Framework (C#) zu automatisieren. Nun ist ein findiger Oberflächendesigner auf die Idee gekommen kein Invoke eines Buttons zuzulassen. Also würde ich gerne einen Mausklick simulieren. Leider finde ich keine einfache Möglichkeit. Die Klasse System.Windows.Input.Mouse bietet leider keine Methode dazu an.
Bisher habe ich nur diese Möglichkeit ausfindig machen können:

public class Form1 : Form{   
[DllImport("user32.dll",CharSet=CharSet.Auto,
CallingConvention=CallingConvention.StdCall)]
public static extern void mouse_event(long dwFlags, long dx, long dy,
long cButtons, long dwExtraInfo);
private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
private const int MOUSEEVENTF_RIGHTUP = 0x10;

public Form1() { }
public void DoMouseClick()
{
//Call the imported function with the cursor's current position
int X = Cursor.Position.X;
int Y = Cursor.Position.Y;
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}
//...other code needed for the application}


Nun würde mich aber interessieren, ob es eine "elegantere" Vorgehensweise gibt, in der Art Mouse.Click(Location location) :-)
07.04.2011
Sweegle 137 7
1 Antwort
2
Dann bau dir doch so eine Klasse.

könnte dann etwa so aussehen:

public static class MouseSimulator{   
[DllImport("user32.dll",CharSet=CharSet.Auto,
CallingConvention=CallingConvention.StdCall)]
public static extern void mouse_event(long dwFlags, long dx, long dy,
long cButtons, long dwExtraInfo);
private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
private const int MOUSEEVENTF_RIGHTUP = 0x10;

public static void DoMouseClick(Point localtion)
{
DoMouseClick(location.X, location.Y);
}

public static void DoMouseClick(int locationX, int locationY)
{
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, location.X, location.Y, 0, 0);
}

}


Kann dir nicht genau sagen, ob es voll funktionsfähig ist. Habe es nicht getestet

Aufrufen kannst du das ganze dann mit:
MouseSimulator.DoMouseClick(x,y);


Gruß Andy

//Edit: Semikolon vergessen ;)
07.04.2011
cruX 803 1 1 9
cruX 803 1 1 9
Ich glaub den WindowHandle brauchst du auch noch. Ich weiß es nicht, aber ich bin mir (fast) ziemlich sicher. ;-)
phlow666 07.04.2011
Es war zwar nicht das worauf ich eigentlich hinaus wollte, da ich nach einer Klasse innerhalb des .NET Frameworks gesucht habe, die diese Funktion(en) anbietet. Aber nach weiterer Recherche bin ich zu dem Entschluss gekommen, dass es wohl der einzige Lösungsweg ist. Danke trotzdem.
Sweegle 23.04.2011

Stelle deine Ui-Frage jetzt!