Timer und Mausklick per Button aktivieren
-
Ich versuche gerade folgendes in einem Programm zu realisieren.
Per Button soll ein Timer gestartet werden. Nach 5 Sekunden soll der erste Mausklick simuliert werden, nach 10 Sekunden der zweite. Dann soll der Timer anhalten.Zum Mausklick habe ich wohl folgendes in der FAQ gefunden:
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Nur was muss ich dazu einbinden ? Und wie realisiert man unter VC++ einen Timer ? Bei Delphi hab es da immer diese extra Komponente für
-
Schau mal hier.
http://download.pearsoned.de/leseecke/VCPLUS6_21Tg/data/start.htm
Tag 4 ist ne Übung, wie man Timer einsetzt. Aber auch der Rest ist sehr gut.Wenn ich das mit dem Mausevent richtig verstanden habe, möchtest Du quasi einen Buttonclick simulieren. Diese Funktion des Buttonclicks hat dann ja einen Namen z.B. OnButton1().
Also baust Du im Timer einfachOnButton1();
ein.
-
Den Link werde ich mir später mal anschauen. Schonmal Danke dafür.
Jedoch soll nicht nach 5 Sekunden ein Button gedrückt werden, sondern wirklich ein Mausklick simuliert werden. Ich hatte das ganze so versucht:
void CTestprogDlg::OnBnClickedButton2() { Sleep(3000); mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); }
Klicke ich auf den Button, so wird nach 3 Sekunden ein Mausklick simuliert. So weit, so gut
Aber warum funktioniert folgender Code nicht so richtig ? Es soll 2 Sekunden nach dem ersten Mausklick der zweite simuliert werden. Was ist daran falsch ?
Sleep(3000); mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); Sleep(2000); mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Wie es scheint werden beide Mausklicks direkt hintereinander ausgeführt, nach 5 Sekunden Wartezeit.
-
Du legst die Funktion 3 sek schlafen, soweit so gut. Danach löst Du den Mausklick aus und legst die Funktion direkt wieder für 2 sek schlafen.
D. h. das System hatte noch keine Zeit, den ersten Mausklick auszuführen (schläft ja schon wieder). Nach weiteren 2 sek wird das System wieder wach und sagt sich, da wa ja noch was (richtig: der erste Mausklick) das führe ich aus und jetzt der zweite Mausklick und fertig.
Das ist der Grund warum nach 5 sek beide Mausklicks auf einmal ausgeführt werden.
Und das ist auch der Grund, warum Du hier einen Timer einsetzen musst.
-
OK, jetzt wollte ich das Ganze mit einem Timer realisieren. Hab dazu die Anleitung von "C++ in 21 Tagen" genommen. Jedoch komme ich dabei an einer stelle nicht weiter.
Nachdem Sie nun einen Timer gestartet haben, müssen Sie noch den Code aufnehmen, der die Timer-Nachrichten behandelt. Dazu führen Sie folgende Schritte aus:
1. Nehmen Sie mit Hilfe des Klassen-Assistenten eine Variable für das Steuerelement IDC_STATICTIME vom Typ CString mit dem Namen m_sTime auf.
2. Fügen Sie mit dem Klassen-Assistenten eine Funktion für die Nachricht WM_TIMER für das Objekt CTimerDlg hinzu.
Punkt 1 ist noch klar und bereitet auch keine Schwierigkeiten. Jedoch weiß ich nicht wie ich Punkt 2 behandeln soll. Ich kann wohl Klassen oder Variablen hinzufügen. Aber wie füge ich dem ganzen eine Funktion hinzu ?
-
Hat sich erledigt. Ich hab jetzt alles zusammen. Nochmals besten Dank.