2016-04-22 4 views
-1

Ich versuche, ein Programm, das im Hintergrund sitzt, die Mausklicks ignorieren kann - außerhalb des Programms.Wie ignoriert man einen Mausklick in Windows? (C++)

Wie sage ich Windows dies über C++? Ich habe bereits das Programm den Mausklick erkennen lassen. Einfach nicht, wie ich es ignorieren kann.

Der Grund, warum ich dies tun muss, ist, weil meine Maus einen Fehler hat, wo es versehentlich doppelt klickt (oder mehr), wenn ich nur einmal klicke.

Also im Grunde, wenn das Programm registrieren, dass ich mit der Maus klicke, wird es den ersten Klick durchlassen, aber dann deaktivieren Sie diese Schaltfläche (ignoriert alle folgenden Klicks) für ~ 200 Millisekunden.

Wenn möglich, möchte ich vermeiden, externe Bibliotheken zu verwenden. Nur die Standard-Versionen von Visual Studio.

Vielen Dank für das Lesen!

+0

@bku_drytt Es tut mir leid, dass ich nicht klar genug bin. Ich möchte nur wissen, wie ich Windows dazu bringen kann, Mausklicks zu ignorieren. Ich weiß, wie man programmiert, und ich werde das Programm selbst machen. Ich weiß einfach nicht, wie ich weitermachen soll, um das Problem zu lösen. – CandyCreep

+0

@Nicky C Ich weiß, das ist eine Lösung, aber es wäre schön, ein solches Programm in der Hand zu haben. Es wäre auch schön, das Wissen dafür zu haben, wenn ich es in anderen Situationen brauche. – CandyCreep

Antwort

2

können Sie verwenden, um ein low-level mouse hook:

// Variable to store the hook handle 
HHOOK miHook; 

// This is the hook procedure 
LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam) { 
    if(nCode == HC_ACTION) { 
     MSLLHOOKSTRUCT &msll = *(reinterpret_cast<MSLLHOOKSTRUCT*>(lParam)); // In there is more context if you need it 

     if(wParam == WM_LBUTTONDOWN) { 
      // Do your logic here 
      if(letsIgnoreThisClick) { 
       return -1; // This will make the click be ignored 
      } 
     } 
    } 

    return CallNextHookEx(miHook, nCode, wParam, lParam); // Important! Otherwise other mouse hooks may misbehave 
} 

// This is how you install the hook 
SetWindowsHookEx(WH_MOUSE_LL, reinterpret_cast<HOOKPROC>(&LowLevelMouseProc), hInstance, 0); 

// And this is how you would remove the hook again 
UnhookWindowsHookEx(miHook); 

Dieses Codebeispiel nicht verwendet werden kann, natürlich, wie sie ist, sondern auf Ihre Bedürfnisse angepasst werden muss und die einzelnen Teile in den richtigen gestellt werden Orte in Ihrem Code.

Bitte lesen Sie auch den Abschnitt Anmerkungen für SetWindowsHookEx. Sie werden wahrscheinlich eine DLL erstellen müssen, in der sich Ihre Funktion befindet (Sie können sie aus Ihrem Hauptcode laden). Die hInstance in meinem Beispiel muss das Instanz-Handle des Moduls sein, das die Hook-Prozedur enthält. Auch Sie müssen Nachrichten pumpen, damit Ihr Haken richtig funktioniert!

+0

Perfekt! Ich habe es nach ein paar verschiedenen Versuchen zum Laufen gebracht. Ich mag die Kommentare auch sehr. Es machte den Job sehr einfach. Vielen dank für Deine Hilfe! – CandyCreep

+0

Gern geschehen. Sorry, mir ist erst jetzt klar geworden, dass ich zwei Fehler im Code hatte (es gibt kein WM_L BUTTONDOWN, und msll wurde nicht deklariert). – CherryDT

Verwandte Themen