キーが動かなくなる - キーボード ドライバーのバグですか?

キーが動かなくなる - キーボード ドライバーのバグですか?

私はプログラマーとして働いており、かなり速く書きます (ただし、超高速ではありません)。仕事用の Dell ラップトップで、2 つのバグによく遭遇します。これは、基盤となる 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キーボードとそのドライバーによって動作は異なります。がリリースされても何も起こらないため、一部のキーボードは登録されません。

    私の 2 つのキーボードでは、押して放すと、一方ともう一方にはCapsLock送信されますが、送信は行われません。それぞれ(反対側ではありません) を押して放すと、この問題は修正されます。{LCtrlDown}{RCtrlDown}{CtrlUp}Ctrl

    行をコメントアウトする以外に、これに対する解決策は思いつきません。

  • Shift鍵:

    ご説明いただいた動作を再現できました一度、でもどうやってやったのか分からない。

    しかし、私はその線が

    RShift::LShift
    

    犯人です。

    {RShiftDown}右キーが再マップされた状態で が送信される仕組みは説明できませんShiftが、ShiftShiftキーを放すと が送信されるため、どちらのキーを押してもこれが修正されない理由は確かに説明できます{LShiftUp}

    この行をコメントアウトする以外にも解決策があるかもしれませんが、それで何を達成したいのかよくわかりません。

関連情報