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?


Anmelden zum Antworten