4

AutoHotKey を使用して、シフト キーの機能を変更したいと考えています。この機能については、Steve Losh のブログ エントリ (こちら) で説明されています。具体的には、シフト キーで次の操作を実行したいと考えています。

  • LShiftまたはRShiftを 300 ミリ秒以内に押して放し、その間に他のキーが押されていない場合は、それぞれ または を送信します()
  • LShiftRShiftが 300 ミリ秒以内に一緒に「ロール」された場合( を押すLShift、 を押すRShift、 を離すLShift、 を離すRShiftなど)、()またはを送信します)(
  • Shift キーが不適切に使用された場合(LShiftおよびSRShiftおよびKなど)、何も起こりません。

300 ミリ秒の要件と「ローリング」機能に問題がありました。具体的には、次のようなホットキー コンボが原因で、キーが離されたときしか検出できないという問題があります。

LShift &  0:: return

これは私が今のところいるところです:

LShift::
    Send {LShift Down}
    KeyWait, LShift
    Send {LShift Up}
    if (A_TimeSinceThisHotkey < 300){
        if (A_PriorKey = "LShift")
        {
            Send {)}
        }
    }
return
4

4 に答える 4

3

とにかく 300 ミリ秒のタイムアウトを使用する理由がわかりません。信頼性が低く、不要なようです。
このコメント付きのコードを見てください。短くて効率的で、すべての要件を満たしているようです。

LShift::Send, (
RShift::Send, )
LShift & RShift:: Send, ()
RShift & LShift:: Send, )(

/* Put your unwanted combinations here
 * and let them do nothing
*/
LShift & q::return
RShift & y::return

編集:
LShift と RShift は既にプレフィックスのホットキーであるため、ここで説明されているトリックを省略しました。

于 2013-07-16T14:52:06.213 に答える
1

MCL の答えは近いですが、テストしたところ、Shift キーを押しながらクリックしてもテキストが選択されないことがわかりました。これは、Shift キーを押しながらクリックできるようにするためのパススルーを備えたバージョンです。

;shift to parens
LShift::Send, (
RShift::Send, )
LShift & RShift:: Send, ()
RShift & LShift:: Send, )(

;passthrough for shift-click
LShift & LButton::
  Send, {LShift Down}{LButton}
  Send, {LShift Up}
RShift & LButton::
  Send, {RShift Down}{LButton}
  Send, {RShift Up}

オートホットキーの実装を深く理解したり、オートホットキーを実際に変更したりしなければ、300ミリ秒のタイムアウトは不可能だと思います。( http://www.autohotkey.com/board/topic/98742-remapping-shift-key/を使用して)動作させようとしたとき、A_PriorHotkey一貫して入力されていないことがわかりました。変数がこのように修飾キーで機能することを意図していたとは思いません。

于 2015-03-05T04:07:02.260 に答える