Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0156: Mausbewegungen und Mausklicks simulieren

 von 

Beschreibung 

Das hier vorgestellte Beispiel maximiert sich selbst, bewegt den Mauszeiger in die obige rechte Ecke und führt weiterhin ferngesteuert einen Click auf das 'X' des eigenen Fensters aus.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

GetCursorPos, SetCursorPos, mouse_event

Download:

Download des Beispielprojektes [2,15 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Timersteuerelement "Timer1"
' Steuerelement: Schaltfläche "Command1"

Option Explicit

Private Declare Function SetCursorPos Lib "user32" (ByVal _
        X As Long, ByVal Y As Long) As Long

Private Declare Function GetCursorPos Lib "user32" _
        (lpPoint As POINTAPI) As Long

Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags _
        As Long, ByVal dx As Long, ByVal dy As Long, ByVal _
        cButtons As Long, ByVal dwExtraInfo As Long)

Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_ABSOLUTE = &H8000&

Private Type POINTAPI
  X As Long
  Y As Long
End Type

Dim aX%, aY%, dx%, dy%

Private Sub Form_Load()
  Timer1.Enabled = False
  Timer1.Interval = 50
  Me.WindowState = 2
  Command1.Left = Screen.Width / 2
  Command1.Top = Screen.Height / 2
End Sub

Private Sub Command1_Click()
  Timer1.Enabled = True
  dx = Screen.Width / Screen.TwipsPerPixelX - 10
  dy = 5
End Sub

Private Sub Timer1_Timer()
  Dim Pt As POINTAPI
  
    Call GetCursorPos(Pt)
      aX = Pt.X
      aY = Pt.Y
      If aY > dy Then aY = aY - 15
      If aX < dx Then aX = aX + 20
      
      Call SetCursorPos(aX, aY)
      
      If aY <= dy And aX >= dx Then
        SetCursorPos dx, dy
        Timer1.Enabled = False
        Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
        Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
      End If
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 13 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Sachse am 11.12.2008 um 20:20

Ich frage mich, warum sämtlich "Tricks" so miserabel dokumentiert sind? Für wen sind die Tricks? Sollen die extra nicht für Anfänger sein?

Kommentar von EvD am 12.09.2003 um 11:25

hab folgendes problem, die calls sind zwar schön und gut, aber sie sind ziemlich langsam, gibts auch nen schnelleren weg (mehrere klicks hintereinander in kürzester zeit) hab schon bissel experimentiert aber mehr als 2 tausenstel krieg ich net raus

Kommentar von schein am 19.02.2003 um 16:01

Bei mir funktioniert die rechte Maustastensimulation nicht. Warum?

Kommentar von TimTom am 05.01.2003 um 01:58

Haijeijai... ;)

Sagt mal, habt Ihr eigentlich gar keine Lust, Euch WEITERGEHEND mit dem Thema Programmierung, bzw. speziell VB, auseinanderzusetzen ?!

Die meisten Memos hier, sagen mir: Ich will ein Haus bauen, hab aber gar kein Grundstück... Naja, so ungefähr... :)

Hab grad leider nich meinen PC vor der Nase, aber ich versuchs mal...


Zu mbruenni:

Erstmal, würde ich in den Eigenschaften des FlexGrids, die Auswahloption, auf Zeilenweise setzen...
Das war der einfache Teil...

Nun würde ich kombinieren. Z.B. würde ich das mouse_event benutzen im Zusammenhang von der FormPosition, somit der darauf befindlichen FlexGridPosition und der Höhe der Zeile, um so eine bestimmte Zeile auswählen zu können.
(Nachfolgend, den Umgang mit Twips und Pixeln beachten !)

MausX = form1.left + form1.flexgrid1.left +(form1.flexgrid1.colwidth / 2)

Damit habe ich die X-Koordinate für die Mitte der ersten Spalte des FlexGrids ermittelt...

REM Ich merk grad, das mit den Befehlen und Eigenschaftenbezeichnungen, stimmt nicht ganz
aber wie gesagt, kanns auch grad net kontrollieren... Aber vielleicht seht Ihr ja, was ich meine... //

MausY = (form1.top + form1.flexgrid1.top +
(NummerZeile*(form1.flexgrid1.rowheight))) -
(flexgrid1.rowheight/2)

Und so hab ich die Y-Koordinate, für die (Horiz.)Mitte der Spalte(NummerSpalte).

(Übrigens beide Zuweisungen, stehen eigentlich in einer Zeile...)

Nun kannst Du das mouse_event benutzen, zum erstmaligen anklicken der Zeile, und dann zum Rechte-Maustaste-Klick...


Zu Daniel:

Setz einfach die vier Zeilen aus der letzten IF-Abfrage, in die Command Prozedur, NACH der Zuweisung, von dx und dy...

Nun passiert Dein Begehren, sobald Du auf command1 klickst...
Wunder Dich aber nicht, das Resultat, wirst Du nie sehen, da das Fenster sehr schnell geschlossen sein wird... ;)


Zu Kasten:

Du brauchst die Koordinaten, des X-Buttons...
Entweder wie hier vorgestellt, wenn das Fenster max. ist oder über die API.
(Komplizierter, da mehrere Aufrufe benutzt werden müssen...)


Zu AntiGotchi:

Benutze die SetCursorPos Funktion. Z.B in einer Schleife...


Zu Amok:

Joah... Bei solch ähnlichem Prob, häng ich auch grad... Das läuft bestimmt, irgendwie mit dem mouse_event_record zusammen, muss aber nicht, und wenn, weiss auch net genau wie... ;)

So, det wars wohl erstmal...

Hoffe ich konnt Euch zumindest ein wenig weiterhelfen, denn bis denn, und wech...

Ciao TimTom

Kommentar von mbruenni am 15.04.2002 um 10:49

Hi,ich möchte vor dem öffnen eines popup menüs das mit der rechten MT geöffnet wird einen mausklick mit linker MT simulieren um eine Zeile eines fgrids vorher zu selektieren,leider klappt dies nicht,hat einer ahnung wie dies geht?.Ist eine simulation eines mausdown events innerhalb eines mausdown events überhaupt möglich?

Kommentar von Markus Neubauer am 14.04.2002 um 11:44

@ Flo.
Schon mal an Visual Basic gedacht ? (-:

Kommentar von Daniel Lensing am 19.10.2001 um 08:41

ich möchte gar keine Mausbewegung haben. Derzeiger soll über den absoluten Mauszeigerwert die Schaltflächen (wie hier das "X") betätigen.
Wie muss das Programm geändert werden??
Kann mir da vielleicht jemand helfen
?!
Schreibt mir doch einfach eine E-Mail

Kommentar von Kasten am 20.07.2001 um 12:18

Hi, wie kann ich das mousedouwnevent auf dem Button übertragen?

Kommentar von Antigotchi am 05.05.2001 um 14:50

Hi
gibts auch nen code der einfach nur die Maus bewegt und nirgends hinklickt?

Kommentar von niklas am 20.02.2001 um 19:06

ja lass einfach ICQ laufen (www.icq.com)

Kommentar von Amok am 14.01.2001 um 17:52

Hi,
ich möchte mir so ein multi tool machen, bin auch schon dabei, und jetzt brauche ich nur noch ein proggie,
mit dem man die Mausbewegungen aufzeichnet ( AUCH KLICKS ), die dann speichert und dann wiedergibt !?!?!?!?!?!?!?!?! das ist wichtig ! pls

Kommentar von Götz Reinecke am 02.10.2000 um 14:45

Hallo Flo, du kannst Dir die Programme hier alle downloaden (s. drehende Diskette) und in VB ganz normal starten.
Grüße
Götz

Kommentar von Florian am 02.10.2000 um 14:40

Hallo,
wie baue ich die vorgestellten Programme ein, etwa durch den Editor ? Wie starte ich die programme ? Gibt es ein Programm, das mich nicht aus der Flatrate wirft ?