2

デフォルトの方法である Shift キーを 5 回押すのではなく、1 つのボタンを押してスティッキー キーを有効にしたいと考えています。

もしやったら

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 に答える