Mausklick an bestimmter Position innerhalb eines Fensters

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von soulreafer.

    Mausklick an bestimmter Position innerhalb eines Fensters

    Ich möchte gerne einen Mausklick an einer bestimmten Position innerhalb eines Fensters senden.
    Ich habe keine probleme damit, einfach einen Mausklick an einer beliebigen Position zu simulieren aber damit das dies eben innerhalb dieses fensters (fenster ist minimiert) passiert. Perfekt wäre es wenn es so eine Fkt. dafür gäbe wie für Tastatureingaben die SendMessage funktion, nur halt eben für maus.
    Aber sowas habe ich bisher noch nicht gefunden.

    Freue mich über jede hilfe :)
    Das soll mal bestandteil eines Makros werden..
    Per Hotkey soll in diesem minimierten Fenster etwas angeklickt werden.
    und ja, es sehr wohl mit SendMessage möglich, aber mein problem ist halt dann noch das setzen des Cursors, bzw. die Position an der der Klick ausgeführt werden soll. Perfekt wäre es halt wenn das alles nur "in" diesem minimierten Fenster abläuft, also ich quasi noch unabhängig davon die maus bewegen kann..
    das Problem wird wohl sein, dass niemand wirklich versteht, was du willst(inklusive mir) einen Klick auf den Button kannst du mit SendMessage simulieren(auch wenn es minimiert ist..)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Du kannst in einem minimierten Fenster keinen Mausklick simulieren. Der Zeiger klickt dann zwar an die angegebene Position des Bildschirms, da das Fenster aber minimiert ist, wird nicht auf den gewünschten Button geklickt.

    Ist dieses minimierte Fenster teil deines Programmes oder irgendein anderes Fenster?
    okay ich hab google nochmal gequält und hab es schließlich doch hinbekommen ;)
    man kann über SendMessage sehr wohl einen Mausklick in einem fremden Fenster simulieren, sogar an wählbaren Koordinaten

    VB.NET-Quellcode

    1. Private Declare Ansi Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Keys, ByVal lParam As Integer) As Integer
    2. Private Const WM_LBUTTONUP As Long = &H202
    3. Private Const WM_LBUTTONDOWN As Long = &H201
    4. Dim ClickPos As Integer = MakeDWord(80, 230)
    5. SendMessage(WindowHandle.Item(WindowToSendTo), WM_LBUTTONDOWN, Keys.LButton, ClickPos)
    6. SendMessage(WindowHandle.Item(WindowToSendTo), WM_LBUTTONUP, Keys.LButton, ClickPos)
    7. Private Function MakeDWord(ByVal LoWord As Integer, ByVal HiWord As Integer) As Integer
    8. MakeDWord = (HiWord * &H10000) Or (LoWord And &HFFFF&)
    9. End Function
    von Fonsi:
    Natürlich, aber geht das auch, wenn das Fenster minimiert ist?!
    Denk mal nach, das fenster ist minimiert, wo willst du Mausposition setzen, was soll der Maus anklicken, vieleicht eine leere regen wolke ?
    Du kannst an minimierte Anwendung bestimmte Tasten/Tasten kombination senden (wenn anwendung tasten kombinationen unterstürtzt)

    BTW: kannst du Tasse in der Hand nehmen, die kann nich da ist !

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SystemUnknow“ ()

    du brauchst nur das Handle und das findet man auch von minimierten(und Fenstern mit Visible = False), und mit hilfe diesem Handle kann man an das Fenster und somit an jedes Subcontrol eine Nachricht senden über SendMessage und damit sollten auch Mausereignisse gehen, ich kanns ja nochmal probieren, wenn dus mir nur meiner Vermutung zufolge glaubst...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    nein aus, weg damit...
    der von SemperVideo ist zwar nicht schlecht, aber ich meine nicht, dass er so der Held ist, wahrscheinlich einiges davon selbst nicht versteht und nicht gerade der kompetenteste ist(keine Controlbenennung z.B.)

    außerdem ist dies gerade das, was wir nicht wollen, haben...

    also ist da etwas anderes recht genau beschrieben... SendMessage ist hier die perfekte Lösung, ohne die Maus auch nur zu bewegen..außerdem funktioniert dies auch bei einem Minimierten Fenster(immoment getestet...@singu: einfach mal selbst probieren ;) )

    P.S.: Die Position muss relativ zum Control angegeben werden, der Code von "Trerkor" ist beinahe perfekt, es kommen noch ein paar schnell behobene Fehler, wenn man Option Strict ON verwendet(was man tun sollte) und beim Handle würde ich den Datentyp IntPtr verwenden...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---