Tasten bleiben hängen - Fehler in Tastaturtreibern?

2994
Jonas Byström

Ich arbeite als Programmierer und schreibe ziemlich schnell (nicht super schnell). Bei meiner Arbeit stelle ich häufig zwei Bugs an, von denen ich vermute, dass sie mit einigen Windows-Tastaturtreibern zu tun haben ("Underlying", da die Bugs auch auf einer völlig anderen Tastaturmarke auftreten). Es ist keine physikalische Eigenschaft der Tastatur. Ich habe versucht, die Tastatur selbst zu ersetzen. Beide USB-Tastatur, übrigens.

Dies sind die seltsamen Probleme:

  • Der CtrlSchlüssel hängt, wenn ich schnell tippe - aber er hängt nicht physisch - der "Freigabeschlüsselcode" erreicht niemals das Betriebssystem, wie es scheint. Dies passiert häufig, etwa alle 20 bis 120 Sekunden, wenn ich in der Zone bin. Um das Problem zu lösen, müssen Sie zuerst feststellen, dass die Steuertaste vom System als gedrückt betrachtet wird und 2) die rechte Ctrl Taste drücken und loslassen . Die linke CtrlTaste behebt den Fehler nicht (ich weiß, dass sie andere Scan-Codes senden).

  • Die ShiftTaste "hängt" auf die gleiche Weise, aber es gibt keine Möglichkeit, sie durch Drücken und Loslassen der Umschalttaste zu entsperren. Es scheint einen internen Zähler zu geben, der hängt. Dies geschieht möglicherweise alle 10 bis 20 Tage. Um das Problem zu lösen, müssen Sie feststellen, 1) dass sich die ShiftTaste in einem gedrückten Zustand befindet (es ist unmöglich, mit der Shiftgedrückten Taste zu arbeiten. Das Auswählen einer anderen Datei in Explorer.exe wird unmöglich, ganz zu schweigen von dem Versuch, Code in Eclipse zu schreiben) und zu beheben 2) Führen Sie ein Skript aus, das ich für AutoHotkey geschrieben habe, und sendet es an das System. Bevor ich das Skript geschrieben habe, musste ich den Computer neu starten ...

Ich ärgere mich darüber. Was ist der Grund und wie kann ich diese Probleme lösen?

Edit: hier ist meine AHK-Datei:

RShift::LShift  ^!+r:: ; Show a black "splash" to reveal script reloading. Run %windir%\system32\cmd.exe /c Reload return  ^!+e:: Edit return  ; Send shift-up. #^!+s:: ; Send shift-up to "fix" my office laptop bug. SendInput  return  ; -------------------------  !+a:: Run C:\Program Files\Notepad++\notepad++.exe return  ^!+a:: Run %windir%\system32\notepad.exe return  ^!+d:: Run %programfiles%\git\bin\bash.exe, c:\RnD\PD\trunk return  RunExplorer(root, startTitle, subpath, endTitle, filename) { SetTitleMatchMode, 3 IfWinExist, %endTitle% { WinActivate,%endTitle% return } else { var = /e, if (root != "") { var = /e,/root,%root% } Run "%windir%\explorer.exe" %var% WinWait,%startTitle%,,4 } if (ErrorLevel == 0) { #WinActivateForce WinActivate,%startTitle% WinWaitActive,%startTitle%,,10 if (subpath != "") { SendInput d%subpath% } SendInput %filename% } }  ;Opens project home folder. #e:: RunExplorer("C:\RnD", "RnD", "\protustom\trunk\implementation\Protom", "Protom", "ProtomDC") return  ;Opens My docs folder. #m:: RunExplorer("H:\", "V0c1573 on 'Vcn.ds.volvo.net\It-got\Home07' (H:)", "My Documents", "My Documents", "Auto") return  ;Opens program files #h:: RunExplorer("C:\", "Local Disk (C:)", "Program Files", "Program Files", "7") return  #k:: Run %windir%\system32\Control.exe return  #c:: Run calc.exe return  #r:: Run regedit.exe return  ; Stores a screen shot as tmp.png on the desktop. ; Take screenshot manually before running this. #q:: Run c:\WINDOWS\system32\mspaint.exe WinWaitActive, namnlös - Paint,,15 if (ErrorLevel == 0) { Send ^v ; Paste screenshot. Send !am ; Save as. Send ++ ; Save to desktop folder. Send tmp ; Write tmp.png. WinWaitActive, Spara som,,2 if (ErrorLevel == 0) { Sleep, 100 ; Wait a bit for dialog to load. Send ; Overwrite previous file. } Send ! ; Close paint. } return   ; Shift+CapsLock turns on/off CapsLock. ;Capslock::Ctrl ;+Capslock::Capslock 
6
Da Sie AutoHotkey erwähnen: Haben Sie andere Skripte, die ausgeführt werden? Dennis vor 12 Jahren 3
Ich bin nicht sicher, was Sie meinen, aber ich verwende AutoHotkey mit Unterstützung für mehrere Tasten und andere Funktionen. Das gleiche Skript, das ich auf meinem Heimcomputer ausführte (und von mehreren anderen ausgeführt wurde), aber dann ohne Probleme. Denken Sie, dass dies durch die Kombination von AutoHotkey und etwas in meinem Laptop verursacht wird? Ich werde morgen versuchen, AutoHotkey herunterzufahren, um Sie wissen zu lassen, ob dies der Täter war. Jonas Byström vor 12 Jahren 0
* Denken Sie, dass die Kombination von AutoHotkey und etwas in meinem Laptop dies verursacht? * Möglicherweise. Ein Skript, das `` ohne das entsprechende `` sendet, könnte einen Teil des Geschehens erklären. Dennis vor 12 Jahren 3
Ich habe noch nie von einer Person gehört, die schneller schreiben kann als Windows-Treiber (es sei denn, Sie haben einen unglaublich langsamen PC). :) Scherz, ein Autohotkey-Skript scheint der Grund zu sein. Beenden Sie einfach Autohotkey und versuchen Sie es, wenn das Problem immer noch da ist. Das ist bei mir passiert. In einigen Skripts mit komplexer Logik gibt es einige Szenarien, in denen ein Schlüssel nicht freigegeben wird. Haben Sie etwas dagegen, Ihre gesamte AHK-Datei hier zu veröffentlichen, damit ich nach etwas suchen kann. tumchaaditya vor 12 Jahren 0
Ich bemerke dieses Verhalten manchmal auf meinem Dell-Desktop. Wenn es passiert, drücke ich verzweifelt die Tasten für das Bedienelement, die Umschalttaste und die Alt-Taste, und dies löscht sie normalerweise. Stuart Woodward vor 12 Jahren 0
Ich nahm an, dass es sich um ein Artefakt der elektrischen Tastatur der Tastatur handelt. Wenn Sie bestimmte Tasten gleichzeitig drücken, kann eine billige Tastatur einen falschen Anschlag auf eine andere Taste geben. Da Tastaturen meistens ein Gebrauchsgegenstand sind, könnten zwei völlig unterschiedliche Tastaturen das gleiche Problem haben, wenn ihr zugrunde liegendes elektrisches Design das gleiche ist, sie können sogar denselben Tastatur-Controller-Chip intern verwenden. Stuart Woodward vor 12 Jahren 0
@StuartWoodward: Ich habe gesehen, dass Tasten aufgehört haben zu funktionieren (normalerweise in Spielen), wenn andere im "Raster" gedrückt werden, aber zuvor noch nie falsches Drücken erhalten wurde. Es sind auch genau dieselben Tasten. Jonas Byström vor 12 Jahren 0
@Dennis: Ich glaube du hast recht, sieh meine Bearbeitung. Jonas Byström vor 12 Jahren 0
Diese Frage erinnerte mich an [this] (http://blogs.msdn.com/b/visualstudio/archive/2012/05/25/visual-studio-11-performance-improvements-in-typing-und-editing-responsiveness .aspx) und * insbesondere * [this] (http://superuser.com/questions/428350/why-does-windows-sometimes-copy-to-clipboard-when-i-press-the-delete-key). Der Hochstapler vor 12 Jahren 0
@OliverSalzburg: Sie tun? Da sie das Tippen enthalten? :) Jonas Byström vor 12 Jahren 0

1 Antwort auf die Frage

2
Dennis
  • Ctrl Schlüssel:

    Ich gehe davon aus, dass die Leitung

    Capslock::Ctrl 

    wurde nicht auskommentiert, wenn Sie Probleme mit dem CtrlSchlüssel hatten.

    Unterschiedliche Tastaturen und deren Treiber verhalten sich unterschiedlich. Einige registrieren sich nicht, wenn CapsLockveröffentlicht wird, da dies normalerweise nichts bewirkt.

    Auf meiner zwei Keyboards, Drücken und Loslassen CapsLocksendet auf der einen und auf der anderen, aber nie . Durch Drücken und Loslassen des jeweiligen Ctrl(aber nicht des gegenüberliegenden) wird dies behoben.

    Abgesehen davon, dass ich die Zeile auskommentiere, fällt mir keine Lösung ein.

  • Shift Schlüssel:

    Ich schaffte es, das Verhalten Sie erklärt zu reproduzieren einmal, aber ich weiß nicht, wie ich es tat.

    Ich gehe jedoch davon aus, dass die Leitung

    RShift::LShift 

    ist der Täter.

    Ich kann nicht erklären, wie eine Sendung möglicherweise mit der rechten ShiftTaste erneut gesendet wird, aber es erklärt sicherlich, warum das Drücken einer der ShiftTasten dies behebt, da das Loslassen der rechten ShiftTaste gesendet wird .

    Es gibt vielleicht eine andere Lösung als das Kommentieren der Zeile, aber ich bin nicht ganz sicher, was Sie damit erreichen wollen.

Ich glaube nicht, dass dies etwas mit AutoHotkey zu tun hat, da ich den Fehler hin und wieder reproduzieren kann, ohne AutoHotkey auszuführen. Mein `SendInput ` - Skript behebt das lästige Problem. Jonas Byström vor 10 Jahren 1