我是一名程序员,写得很快(虽然不是超级快)。在我的工作戴尔笔记本电脑中,我经常遇到两个错误,我怀疑这与某些底层 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}
。除了注释掉该行之外,可能还有其他解决方案,但我不太确定您想用它实现什么。