2

我想通过按 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

为什么它不起作用有什么原因吗?

4

2 回答 2

0

虽然很可能有办法进行 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

于 2012-10-13T05:58:59.433 回答
0
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 激活粘滞键会导致一些奇怪的事情发生:光标跳来跳去,一些文件夹被启动,脚本退出等等。我猜它激活了其他附近有热键吗?

于 2012-10-16T18:17:36.443 回答