Bei gedrückter linken Maustaste klicken
-
Hey
Ich möchte bei gedrückter linken Maustaste mehrere Klicks ausführen solange diese gedrückt bleibt.
Ich erstelle einen LowLevelMouseProc(Hook) und überprüfe ob LBUTTONDOWN aktiviert ist.int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { // Set windows hook cout << "Starting..." << endl; HHOOK mouseHook = SetWindowsHookEx(WH_MOUSE_LL,MouseProc,hInstance,0); MessageBox(NULL, "Press OK to stop.", "Information", MB_OK); return 0; } LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) { PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)(lParam); if (onoff == true) { if (wParam == WM_LBUTTONDOWN) { INPUT Input; Input.type = INPUT_MOUSE; Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN; //Linke Taste Runter. SendInput(true, &Input, sizeof(Input)); ZeroMemory(&Input,sizeof(INPUT)); Input.mi.dwFlags = MOUSEEVENTF_LEFTUP; //Linke Taste loslassen. SendInput(true, &Input, sizeof(Input)); Sleep(60); } } return CallNextHookEx(NULL, nCode, wParam, lParam); }
Dies wird auch ausgeführt.. Jedenfalls wird nur ungefähr 16x geklickt und hört dann auf. Da diese aber solange Klicks senden soll wie die
Linke Maustaste gedrückt bleibt, erfüllt das nicht den Zweck.
Liegt es evtl. daran, dass diese SendInputs ebenfalls wahrgenommen werden von dem LLMOUSEHOOK und deshalb nur 16x geklickt wird?Ich hoffe ich bin hier im richtigen Unterforum.
MfG
-
Hallo
Ich finde die Grundkonstruktion deines Codes sehr kritisch.
Du solltes keine Sleeps in einer Hook-Callback Funktion aufrufen.Besser wäre es du startest einen Thread von dem aus du bei Bedarf
SendInput(...) aufrufts.
-
AZ schrieb:
Hallo
Ich finde die Grundkonstruktion deines Codes sehr kritisch.
Du solltes keine Sleeps in einer Hook-Callback Funktion aufrufen.Besser wäre es du startest einen Thread von dem aus du bei Bedarf
SendInput(...) aufrufts.So ist es.
Und das ist wohl auch Teil des Problems, das die Messageverarbeitung
ins Stocken kommt.Es würde wohl ausreichen beim Drücken einen Timer zu starten und den Timer beim Loslassen wieder zu beenden.
-
Hi also ich finde deinen Code
sehr sauber , er knallt auch gut in die Quee rein,
da gibt es nicht das geringste zu beanstanden.Was allerdings ulkig wäre ist, wenn ich neuerdings mit
gedrückter rb dann lb drücke , das würde auf Dauer jedenfalls
zu krämpfen führen, wenn Du erstmal 50 bist und 35 Jahre programmiert
hast, lösen alle Verränkungen Astrose in den Fingern aus.Dein Code arbeitet gegen die Erwartungshaltung, das ist ungut.
Also immer nur eine Taste beanspruchen, so ist die Regel.Also mit anderen Worten scheiß Maus !
-
Müsste nicht dadurch dass fortender in dem mouse hook einen mouse klick simuliert der hook wieder gerufen werden und so immer weiter?