Form1.PerformClick()

  • VB.NET
  • .NET (FX) 4.0

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Form1.PerformClick()

    Hallo,
    ich weiß das ich den Klick auf einen Button siulieren kann mit:

    Quellcode

    1. Button1.PerformClick()



    Jetzt möchte ich aber in die untere linke Ecke einer Form klicken, oder es zumindest simulieren.
    So in etwa:

    Quellcode

    1. Form1.PerformClick(New Point(0, 1))


    Aber der Code funktioniert nicht, aber wie könnte es funktionieren?

    Danke, Hilfe0987
    :thumbup:
    Was ist Dein Vorhaben? Mit jener Info ließe sich vielleicht eine sinnvolle Lösung finden. Mit den wenigen bisherigen Infos ginge zwar sowas wie (inklusive echtem und zwei simulierten FormKlicks):

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub btnSimulateClickIncludingMouseMoving_Click(sender As System.Object, e As System.EventArgs) Handles btnSimulateClickIncludingMouseMoving.Click
    2. SimulateFormClickIncludingMouseMovingAtFormPosition(0, 1)
    3. End Sub
    4. Private Sub btnSimulateClick_Click(sender As System.Object, e As System.EventArgs) Handles btnSimulateClick.Click
    5. HandleFormClick(0, 1)
    6. End Sub
    7. Private Sub Main_MouseClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
    8. HandleFormClick(e.X, e.Y)
    9. End Sub
    10. Private Sub SimulateFormClickIncludingMouseMovingAtFormPosition(XWert As Integer, YWert As Integer)
    11. Dim RealCursorPosition = Cursor.Position
    12. Cursor.Position = New Point(XWert + Me.Left, YWert + Me.Top) 'ohne die Me.Left/Me.Top-Werte würden die New Point-Koordinaten absolute Bildschirmpositionen sein
    13. HandleFormClick(XWert, YWert)
    14. Cursor.Position = RealCursorPosition
    15. End Sub
    16. Private Sub HandleFormClick(XWert As Integer, YWert As Integer)
    17. MessageBox.Show("Form was shot at " & XWert.ToString & ", " & YWert.ToString & ".")
    18. End Sub



    ...aber der von Dir angestrebte Sinn des Ganzen entzieht sich mir noch.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Nein, es wird wohl nicht einfacher gehen. Was erwartest Du? ;) Schließlich muss der Klick an der Stelle ja simuliert werden.
    Und was machst Du, wenn diese sich auf einmal nicht mehr an der Position befindet? Keine gute Lösung.
    Stattdessen solltest Du das lieber über den Source der Seite lösen.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Das ändert trotzdem nichts daran, dass die Lösung unsauber ist.
    Suche das Teil im Quellcode der Seite und entferne es. Fertig.

    Geht es um die Meldung von Google mit der Standardsuchmaschine? :D

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Naja, es ginge notfalls schon. Mausklicksimulation mittels P/Invoke:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class Main
    3. Private Const MOUSEEVENTF_LEFTDOWN = &H2
    4. Private Const MOUSEEVENTF_LEFTUP = &H4
    5. <DllImport("user32.dll", EntryPoint:="mouse_event")> Private Shared Sub MouseEvent(dwFlags As UInteger, dx As UInteger, dy As UInteger, dwData As UInteger, dwExtraInfo As Integer)
    6. End Sub
    7. Private Sub SimulateMouseClickAt(xValue As Integer, yValue As Integer)
    8. Dim RealMousePosition = Cursor.Position
    9. Cursor.Position = New Point(xValue + Me.Left, yValue + Me.Top)
    10. MouseEvent(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    11. MouseEvent(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
    12. Cursor.Position = RealMousePosition
    13. End Sub



    Unschön bleibt es trotzdem, da hat Trade recht. Vor allem: Irgendwie muss ja auch das KlickInDieLuft ausgelöst werden. Und hanebüchen wär es, wenn das mittels Klick auf einen Button passieren würde ...
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Hilfe0987 schrieb:

    ich weiß, das die Anmerkung IMMER an der gleichen Stelle ist
    Dann musst Du doch den Klick selbst nicht simulieren, sondern kannst direkt den entsprechenden Klick-Handler aufrufen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Hilfe0987 Welche Prozedur wird aufgerufen, wenn das Klick-Ereignis aufgerufen wird?
    Statt den Klick zu simulieren kannst Du direkt diese Prozedur aufrufen, sofern sich beide (die klickende und die geklickt werdende) in einem Projekt befinden.
    Oder
    Willst Du ein anderes Programm fernsteuern? Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany Hast Du den Thread richtig durchgelesen? Es geht um den Inhalt eines WebBrowsers...

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Trade schrieb:

    WebBrowser
    Sorry.
    @Hilfe0987 Allerdings ist dann die Aussage mit derselben Stelle zu relativieren, da dar Browser-Inhalt gezoomt sein kann.
    Den MausCursor positionieren

    VB.NET-Quellcode

    1. Cursor.Position = New Point(10, 10) ' in Windows-Koordinaten

    und dann dies hier
    Gugst Du hier.
    ======
    Testprojekt mit 3 Button und dem Modul1:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Me.Location = New Point(100, 100)
    4. End Sub
    5. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    6. Cursor.Position = New Point(300, 150)
    7. Modul1.Mausklick(Windows.Forms.MouseButtons.Left)
    8. End Sub
    9. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    10. MessageBox.Show("Klick")
    11. End Sub
    12. End Class

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

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