2009-03-15 12 views
21

Zum starten ich diesen Code bei http://swigartconsulting.blogs.com/tech_blender/2005/08/how_to_move_the.html gefunden:Bewegen Mauszeiger programmatisch

public class Win32 
{ 
    [DllImport("User32.Dll")] 
    public static extern long SetCursorPos(int x, int y); 

    [DllImport("User32.Dll")] 
    public static extern bool ClientToScreen(IntPtr hWnd, ref POINT point); 

    [StructLayout(LayoutKind.Sequential)] 
    public struct POINT 
    { 
     public int x; 
     public int y; 
    } 
} 

Fügen Sie den folgenden Code in der Click-Eventhandler der Schaltfläche:

Win32.POINT p = new Win32.POINT(); 
p.x = button1.Left + (button1.Width/2); 
p.y = button1.Top + (button1.Height/2); 

Win32.ClientToScreen(this.Handle, ref p); 
Win32.SetCursorPos(p.x, p.y); 

Dies wird mit der Maus in die Mitte der Schaltfläche.

Dieser Code funktioniert gut, aber ich kann nicht herausfinden, wie man es ein wenig erweitern kann. Nehmen wir an, ich habe Internet Explorer (eingebettet in eine Windows-Form), der zu einer Webseite geöffnet ist (irgendeine zufällige Seite, von der ich vorher nichts weiß), mit einem Dropdown-Listenfeld darin. Ich habe den obigen Code geändert, um den Cursor zu bewegen und das Dropdown-Listenfeld aufzurufen (mit der unten gezeigten Mausklick-Methode, um die Liste zu löschen) und die Liste nach oben und unten zu verschieben, wobei jedes Element als Mauszeiger hervorgehoben wird geht rüber, aber für das Leben von mir kann ich nicht herausfinden, wie man tatsächlich den Mausklick auf den aktuell ausgewählten Gegenstand macht, um die Auswahl beizubehalten. So wie ich es jetzt mache, schließt sich das Dropdown-Listenfeld und die Auswahl wird nicht geändert. Ich verwende den folgenden Code für das Mausklick (die die Liste bekommt zu fallen nach unten):

private static void MouseClick(int x, int y, IntPtr handle) //handle for the browser window 
{ 
    IntPtr lParam = (IntPtr)((y << 16) | x); // The coordinates 
    IntPtr wParam = IntPtr.Zero; // Additional parameters for the click (e.g. Ctrl) 

    const uint downCode = 0x201; // Left click down code 
    const uint upCode = 0x202; // Left click up code 

    SendMessage(handle, downCode, wParam, lParam); // Mouse button down 
    SendMessage(handle, upCode, wParam, lParam); // Mouse button up 
} 

Ich bin sicher, ich bin etwas fehlt einfach hier, aber für das Leben von mir kann nicht herausfinden was es ist. Vielen Dank im Voraus an alle.

Bob

Antwort

16

sollten Sie verwenden Send (http://msdn.microsoft.com/en-us/library/ms646310(VS.85).aspx) Ereignisse per Mausklick zu synthetisieren, anstatt direkt Sendmessages zu verwenden.

+0

Send dieses Problem behoben und viele andere, die ich mit war. Danke, dass Sie mir geholfen haben, dies zu lösen. Bob – Beaker

+0

Super! Danke :) Ich wollte die gleiche Frage stellen. – hasen

+0

@michael Ich möchte Scroll-In und Scroll-Out-Events behandeln, wie mache ich das? – Faizan

3

Ich glaube, dass Sie eine korrekte WPARAM für die WM_LBUTTONDOWN Nachricht fehlt, die für die linke Taste ist MK_LBUTTON

#define MK_LBUTTON   0x0001 
Verwandte Themen