按鍵卡住 - 鍵盤驅動程式中的錯誤?

按鍵卡住 - 鍵盤驅動程式中的錯誤?

我是一名程式設計師,寫得很快(雖然不是超級快)。在我工作的戴爾筆記型電腦中,我經常遇到兩個錯誤,我懷疑這與某些底層 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}右鍵的情況下發送a Shift,但它確實解釋了為什麼按兩個Shift鍵都無法解決此問題,因為釋放右鍵Shift將發送{LShiftUp}.

    除了註解掉該行之外,可能還有其他解決方案,但我不太確定您想用它實現什麼目標。

相關內容