Start / Tipps / VB 5/6-Tipp 0156: Mausbewegungen und Mausklicks simulieren
 
Startseite Up-/Download Tutorials Club Das Team
Rubriken Foren Bücher Tips 'n Tricks Suche


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


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 2 Verwendete API-Aufrufe:
GetCursorPos, SetCursorPos, mouse_event
Download des Beispielprojektes Download des Beispielprojektes [2,05 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 --------------
Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?
Ja, funktioniert! Windows-Version:
Nein, funktioniert nicht bei mir! VB-Version:

Ihre Meinung

Falls Sie Fragen zu oder Erfahrungen mit diesem Tipp haben, dann sollten Sie diese hier posten. Für alles weitere melden Sie sich bitte in einem zum Thema passendem Forum.

Falls Sie in ihren Kommentar Quellcode einbinden wollen, verwenden Sie bitte Pseudotags: Quellcode für VB5/VB6 wird durch ein vorangestelltes [code] markiert und durch [/code] abgeschlossen.

Ihr Name:   
Ihre E-Mailadresse:   
 
Bitte folgende Kontrollnummer eingeben: 2025
Kontrolle:   
 
Ihre Frage/Ihr Kommentar:
Ja, ich möchte weitere Beiträge per E-Mail erhalten
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?
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
Von schein am 19.02.2003 um 16:01
Bei mir funktioniert die rechte Maustastensimulation nicht. Warum?
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
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?
Von Markus Neubauer am 14.04.2002 um 11:44
@ Flo.
Schon mal an Visual Basic gedacht ? (-:
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
Von Kasten am 20.07.2001 um 12:18
Hi, wie kann ich das mousedouwnevent auf dem Button übertragen?
Von Antigotchi am 05.05.2001 um 14:50
Hi
gibts auch nen code der einfach nur die Maus bewegt und nirgends hinklickt?
Von niklas am 20.02.2001 um 19:06
ja lass einfach ICQ laufen (www.icq.com)
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
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
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 ?

Erstellt: 15.06.2003
Aktualisierung: 15.06.2003
  Autor: ActiveVB
E-Mail: Tipps@ActiveVB.de



Copyright © 1998-2010 by ActiveVB
Alle Rechte vorbehalten.