Innerhalb des Timers zählen und Aktion auslösen

abakuz

Mitglied
Hallo zusammen,

ich versuch mich grad ein bisschen mit VB6 und komme noch nicht so richtig weiter.

Also, ich möchte mit der Maus drei automatische Klicks auslösen und dann einmal eine Bestimmte Aktion auslösen und das immer und immer wieder, bis ich das Programm abbreche. Immer nach drei Klicks eine Aktion (immer die selbe Aktion).

Das mit der automatischen Maus funktioniert bereits, ich mache es über den Timer.
Aber das mit den drei Klicks und dann Aktion auslösen kriege ich nicht hin, mein Prog macht nur DauerMaus ohne Aktion auszulösen. Würde mir bitte jemand weiterhelfen.
Wie muss ich das Programm erweitern damit es funktioniert.

Hier mein Ansatz mit den Klicks:

...
Private Sub meinTimer_Timer()
Dim Pt As POINTAPI
Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
End Sub
...

Freue mich über jede Hilfe.

Gruß Abakuz
 
Hi,

mmhh, das scheint seltsam zu sein, die API habe ich in einigen Projekten laufen und dort in kleinen ms - Abständen.

Zeig mal ein wenig mehr Code.

Sind die Konstanten von der API folgendermaßen?
Code:
MOUSEEVENTF_LEFTDOWN As Long = &H2
MOUSEEVENTF_LEFTUP As Long = &H4
 
Hi DevHB,
danke für die schnelle Antwort

jep, ich würd mit meinem leienhaften Wissen sagen: "schaut ziemlich gleich aus".

...
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4

Private Type POINTAPI
X As Long
Y As Long
End Type
...

Es geht mir aber wirklich nur darum innerhalb des Timers eine Möglichkeit zu finden,
eine Variable hochzählen zu lassen (bis drei) und dann eine Aktion auszulösen, das mit den Mausklicks klappt ja ziemlich gut.

Ich habs jetzt mal so ausprobiert:

...
Private Sub meinTimer_Timer()
Static myCounter As Integer

Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

myCounter = myCounter + 1
If myCounter = 3 Then
'meineAktion
End If
End Sub
...

Das klappt aber auch nicht, und ich hab grad gelesen das er den Wert der Variablen mit Static beibehält, also auch nicht die richtige Herangehensweise.

hmmm, ich dachte echt das wäre schnell gemacht, hänge jetzt seit 4 Std. an dieser kleine Sache...*grummel*...


Gruß Abakuz
 
Zuletzt bearbeitet:
Hi,

das mit statischen Variable ist schon richtig, nur musst Du sie dann natürlich wieder auf 0 setzen:
Code:
Private Sub meinTimer_Timer()
Static myCounter As Integer

Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

myCounter = myCounter + 1
If myCounter = 3 Then
'meineAktion
   myCounter = 0
End If
End Sub

Bleibt noch die Frage, in was für einem Intervall Du den Timer laufen lässt ?

Ein ähnliches Phänomen hatte ich mit der Verwendung eines ActiveX.
In dem wurde eine 3D - Umgebung dargstellt, in der ich Klicks ausführen musste.
Dort war auch das Problem, dass er den MouseUp nicht mitbekommen hat.
Da musste dann ein häßlicher Slepp eingebaut werden:

Code:
' API für Sleep
Public Declare Sub Sleep Lib "kernel32.dll" ( _
     ByVal dwMilliseconds As Long)

Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
Call Sleep(CLng(500))
Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
 
Hiho, guten Morgen,

Das ist ja wirklich ein Phänomen, dein Beispiel mit dem "Sleep" funktioniert Suuuper ..:)
Nur bei einer kleinen Sache hat der Compiler bei mir gemeckert...:

' API für Sleep
Public Declare Sub Sleep Lib "kernel32.dll" ( ByVal dwMilliseconds As Long)

...musste es bei mir auf Private umstellen.

So ganz verstehe ich es allerdings nicht warum es auf einmal , aber egal Hauptsache es klappt.

Vielen Dank für Deine Hilfe
Wünsche Dir einen erfolgreichen Tag.

Gruß Abakuz
 
Hi,

Du hast die API anscheinend in die Form reingepackt, dann müssen die immer "Private" sein, kein Fehler von Dir... ;-)

Das es klappt, liegt wohl daran, dass die beiden MouseClicks zu schnell hintereinander abgefeuert werden.
Spiel mal ein wenig mit dem Wert im Slepp Aufruf (500), eventuell kannst Du den noch reduzieren, Code war so aus nem Projekt rauskopiert, da musste der Wert so hoch sein.
 
Zurück