2016-06-15 23 views
1

Ich versuche, eine Problemumgehung für ein Problem zu finden, das ich beim Debuggen von C# in Visual Studio 2015 habe. Wenn die Anwendung debuggt wird der Mauszeiger zu stark nachstehen Ein Haltepunkt wird getroffen. Dies liegt daran, dass die Anwendung Hooks für Maus und Tastatur registriert. Wenn ein Haltepunkt erreicht wird, warten die Haken auf Eingabe, aber sie erhalten keine, bis das Zeitlimit erreicht ist (~ 5 Sekunden).Hat Windows 10 einen Registrierungseintrag für LowLevelHooksTimeout

Daher habe ich online einige Lösungen gefunden, aber nichts wäre relativ einfach zu implementieren, ohne die Haken zu überarbeiten. Ich habe versucht, einen Registrierungseintrag für LowLevelHooksTimeout hinzuzufügen, um zu sehen, ob ich Windows schneller zum nächsten Hook-Ereignis bewegen könnte, wenn ein Breakpoint getroffen wird, aber es scheint keinen Unterschied zu machen.

Alternativ kann die Verwendung von Raw-Eingabe der einzige Weg sein, aber erfordert ein wenig Arbeit. Ist jemand auf dieses Problem gestoßen und gibt es Lösungen, die zufällig verfügbar sind?

https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/f6032ca1-31b8-4ad5-be39-f78dd29952da/hooking-problem-in-windows-7?forum=windowscompatibility

https://security.stackexchange.com/questions/78732/unregistering-keyboard-hooks-by-timeout-expiration

+0

Führen Sie Ihre App auf einem anderen Computer aus und verwenden Sie den Remote-Debugger. –

Antwort

0

ich mit diesem Open-Source-Code endete gehen: http://www.codeproject.com/Articles/17123/Using-Raw-Input-from-C-to-handle-multiple-keyboard

Es Raw Eingang API in C# implementiert hat. Es gibt auch eine einfache WPF-App, die Geräteinformationen und ähnliches anzeigt, wenn Sie die Tasten drücken (das ist, was in den Screenshots unter dem angegebenen Link angezeigt wird). Ich habe den zugrunde liegenden Code verwendet und in meine Anwendung integriert. Zum Beispiel:

if (RawInputHandler == null) 
{ 
    RawInputHandler = RawInput.Instance; 

    RawInputHandler.LoggingEvent += RawInputHandler_LoggingEvent; 
    RawInputHandler.KeyPressed += RawInputHandler_KeyPressed; 
    RawInputHandler.MousePressed += RawInputHandler_MousePressed; 
} 

Zwischenzeit, in der Roh-Eingangsseite der Dinge, rufe ich diese Ereignisse, wenn ich ein relevantes Ereignis das Rohr kommen erkennen. Es gibt eine Methode ProcessRawInput(Intpr) genannt, wo ich zwischen Maus unterscheiden, Tastatur, etc. Dies über die Überprüfung der Hardware-Typ in den Puffer-Header API erfolgt:

if (_rawBuffer.header.dwType == DeviceType.RIM_TYPE_MOUSE) 
{ 
    // Do mouse stuff, invoke event 
} 

Es war ein Schmerz, aber am Ende dieses API löste das Debuggen Schrecken der Verwendung von Maus/Tastatur-Haken.