我想通过按 1 个按钮来激活粘滞键,而不是按 5 次 shift,这是默认方式。
如果我做
F9::Send {LShift 5}
按 F9 不会产生任何结果。
我也试过
F9::
Send {LShift}
sleep 50
Send {LShift}
sleep 50
Send {LShift}
sleep 50
Send {LShift}
sleep 50
Send {LShift}
sleep 50
return
为什么它不起作用有什么原因吗?
我想通过按 1 个按钮来激活粘滞键,而不是按 5 次 shift,这是默认方式。
如果我做
F9::Send {LShift 5}
按 F9 不会产生任何结果。
我也试过
F9::
Send {LShift}
sleep 50
Send {LShift}
sleep 50
Send {LShift}
sleep 50
Send {LShift}
sleep 50
Send {LShift}
sleep 50
return
为什么它不起作用有什么原因吗?
虽然很可能有办法进行 dll 调用或一些复杂的事情,但也可能使用 AutoHotkey 编写类似的功能。这也可以避免粘键提示,您可以改为使用托盘提示。
stickykeys = 0
F9::
stickykeys:=!stickykeys
Traytip, Sticky Keys, % (stickykeys) ? "On" : "Off"
return
#If stickykeys
*$Shift::
key = 0
Input, key, L1 M
SendInput {Shift Down}{%key%}{Shift Up}
return
*$Ctrl::
key = 0
Input, key, L1 M
SendInput {Ctrl Down}{%key%}{Ctrl Up}
Return
*$Alt::
key = 0
Input, key, L1 M
SendInput {Alt Down}{%key%}{Alt Up}
Return
#If
F9 只是打开和关闭粘滞键。
注意:这是使用支持#If的 AHK_L
SPI_GETSTICKYKEYS:=0x003A
SPI_SETSTICKYKEYS:=0x003B
SKF_STICKYKEYSON:=0x1
VarSetCapacity(STICKYKEYS,8) ; DWORD cbSize;DWORD dwFlags;
NumPut(8,&STICKYKEYS,"UInt")
F9::
DllCall("SystemParametersInfo","UInt",SPI_GETSTICKYKEYS,"UInt",8,"PTR",&STICKYKEYS,"UInt",0)
dwFlags:=NumGet(&STICKYKEYS,4,"Uint")
If (dwFlags & SKF_STICKYKEYSON)
dwFlags-=SKF_STICKYKEYSON
else dwFlags|=SKF_STICKYKEYSON
ToolTip % "STICKYKEYS are " (dwFlags & SKF_STICKYKEYSON ? "ON" : "OFF")
SetTimer,ToolTipOff,-1000
NumPut(dwFlags,&STICKYKEYS,4,"UInt")
DllCall("SystemParametersInfo","UInt",SPI_SETSTICKYKEYS,"UInt",8,"PTR",&STICKYKEYS,"UInt",0)
Return
ToolTipOff:
代码来自http://www.autohotkey.com/community/viewtopic.php?f=1&t=93650的 Autohotkey 论坛
任何想要使用该代码的人的注意事项:我认为您必须将其放在脚本的顶部才能使其工作。在我的热键脚本中,将它放在中间,然后按 F9 激活粘滞键会导致一些奇怪的事情发生:光标跳来跳去,一些文件夹被启动,脚本退出等等。我猜它激活了其他附近有热键吗?