2017-10-15 1 views
0

Also habe ich einen globalen Hotkey mit SetWindowsHookEx() gemacht. Was ich will, ist, während ich die rechte Maustaste drücke, sollte es immer wieder Code ausführen. Das Problem ist, dass wenn ich die rechte Maustaste drücke, es nur einmal ausgeführt wird.SetWindowsHookEx, Ausführen von Code bei gedrückter Maustaste

Dies ist meine Callback-Funktion:

private static IntPtr ButtonHookCallback(int nCode, IntPtr wParam, IntPtr lParam) 
    { 

     if (nCode >= 0) 
     { 
      if (wParam == (IntPtr)WM_RBUTTONDOWN) 
      { 
       _m.rtbLog.AppendText("Right mouse button was clicked \n"); 
      } 

      else if (wParam == (IntPtr)WM_LBUTTONDOWN) 
      { 
       _m.rtbLog.AppendText("Left mouse button was clicked \n"); 
      } 




     } 

     return CallNextHookEx(MainWindow._hookId, nCode, wParam, lParam); 
    } 
+0

Der laufende Code erfordert wiederholt eine Schleife oder einen Timer. Sicherlich ist ein Timer, was Sie suchen gegeben, wie oft eine Schleife Schleife kann, wenn es von einem menschlichen Finger gestartet und gestoppt werden muss. Starte den Timer im mousedown, stoppe ihn mit mouseup notification. Der Timer ist im Allgemeinen auf ~ 16 Millisekunden genau. –

Antwort

-1

Ich kann nicht genau beurteilen, was Ihre Absicht ist, aber erraten Sie die WM_RBUTTONDOWN und WM_RBUTTONUP erreichen kombinieren müssen, was Sie wollen. Während WM_RBUTTONDOWN, starten Sie eine Schleife, um etwas zu tun, während WM_RBUTTONUP, zu tun.

private static IntPtr ButtonHookCallback(int nCode, IntPtr wParam, IntPtr lParam) 
{ 

    if (nCode >= 0) 
    { 
     if (wParam == (IntPtr)WM_RBUTTONDOWN) 
     { 
      Start(); 
     } 

     else if (wParam == (IntPtr)WM_RBUTTONUP) 
     { 
      Stop(); 
     } 
    } 

    return CallNextHookEx(MainWindow._hookId, nCode, wParam, lParam); 
} 

private static void Satrt() 
{ 
    _toStop = false; 

    while (true) 
    { 
     if (_toStop) 
     { 
      _toStop = false; 
      return; 
     } 

     DoTask(); 
    } 
} 

private static void Stop() 
{ 
    _toStop = true; 
} 

private static void DoTask() 
{ 
    // do something 
} 

private static bool _toStop; 
+0

Ja, ich habe es geschafft, es mit einem Timer zu lösen. Wenn der rechte Knopf gedrückt ist, habe ich den Timer gestartet, als es wieder auf war, habe ich ihn gestoppt. – Celmos

Verwandte Themen