Клавиши застревают — ошибка в драйверах клавиатуры?

Клавиши застревают — ошибка в драйверах клавиатуры?

Я работаю программистом и пишу довольно быстро (хотя и не супербыстро). В моем рабочем ноутбуке Dell я часто сталкиваюсь с двумя ошибками, которые, как я подозреваю, связаны с каким-то базовым драйвером клавиатуры Windows («базовым», поскольку ошибки возникают и на клавиатуре совершенно другой марки). Это не физическое свойство клавиатуры, я пробовал заменить саму клавиатуру. Обе клавиатуры USB, кстати.

Вот эти странные проблемы:

  • Клавиша Ctrlзависает, когда я печатаю быстро, но она не зависает физически, "код клавиши освобождения" никогда не достигает операционной системы, как мне кажется. Это происходит часто, скажем, каждые 20-120 секунд, когда я в зоне. Способ решения этой проблемы: 1) понять, что клавиша управления считается нажатой системой, и 2) нажать и отпуститьверно Ctrlклавиша. Левая Ctrlклавиша не исправляет ошибку (я знаю, что они отправляют разные скан-коды).

  • Клавиша Shift"зависает" таким же образом, но нет способа разблокировать ее нажатием и отпусканием клавиши Shift, похоже, есть внутренний счетчик, который зависает. Это происходит, возможно, каждые 10-20 дней. Чтобы решить эту проблему, мне 1) нужно понять, что клавиша Shiftнаходится в нажатом состоянии (невозможно работать с Shiftнажатой клавишей, просто выбрать другой файл в Explorer.exe становится невозможным, не говоря уже о попытке написать код в Eclipse), и чтобы исправить это, мне 2) нужно запустить скрипт, который я написал для AutoHotkey, который отправляет {SHIFT UP}в систему. Перед тем, как я написал скрипт, мне пришлось перезагрузить компьютер...

Меня это начинает раздражать. Что является причиной этого и как мне решить эти проблемы?

Редактировать:вот мой AHK-файл:

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 {Shift Up}
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 {LAlt Down}d{LAlt Up}{End}%subpath%{ENTER}{Tab}{Tab}
    }
    SendInput {Tab}%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 +{Tab}+{Tab}{Down}{ENTER}{Tab}{Tab} ; Save to desktop folder.
    Send tmp{Tab}{Down}{End}{ENTER}{ENTER} ; Write tmp.png.
    WinWaitActive, Spara som,,2
    if (ErrorLevel == 0)
    {
      Sleep, 100 ; Wait a bit for dialog to load.
      Send {Left}{Enter} ; Overwrite previous file.
    }
    Send !{F4} ; Close paint.
  }
return


; Shift+CapsLock turns on/off CapsLock.
;Capslock::Ctrl
;+Capslock::Capslock

решение1

  • Ctrlключ:

    Я предполагаю, что линия

    Capslock::Ctrl
    

    былнетзакомментировано, когда у вас возникли проблемы с Ctrlключом.

    Разные клавиатуры и их драйверы ведут себя по-разному. Некоторые не регистрируют, когда CapsLockотпускают, так как обычно это ничего не делает.

    На моих двух клавиатурах нажатие и отпускание CapsLockотправляет {LCtrlDown}на одну и {RCtrlDown}на другую, но никогда {CtrlUp}. Нажатие и отпускание соответствующей Ctrl(но не противоположной) исправляет это.

    Кроме как закомментировать строку, я не могу придумать другого решения этой проблемы.

  • Shiftключ:

    Мне удалось воспроизвести поведение, которое вы описали.один раз, но я не знаю, как я это сделал.

    Однако я предполагаю, что линия

    RShift::LShift
    

    является виновником.

    Я не могу объяснить, как {RShiftDown}можно отправить сообщение при переназначении правой Shiftклавиши, но это, безусловно, объясняет, почему нажатие любой из Shiftклавиш не исправляет ситуацию, поскольку отпускание правой Shiftклавиши приведет к отправке сообщения {LShiftUp}.

    Возможно, есть решение, отличное от комментирования строки, но я не совсем понимаю, чего вы хотите этим добиться.

Связанный контент