板 1- 前 次 新 レス
旧雑記サルベージ
[86]管理人 ★:06/09/06 17:38 ID:???
2005年11月08日
■Shiftキーを短く押したときに動作するホットキー
Ctrlキーは元の位置とCapsLockの位置の両方にないと不便なので、AutoHotkeyでMS-IME95互換の英字入力トグルを実現しようと思って作ってみた。
なお、Sendで送信している{vkF2sc070}(ひらがな/カタカナ)キーにはATOKのカスタマイズで英字モードOn/Offを割り当てている。
試作一号
~LShift::return
~Lshift Up::
if((A_PriorHotkey="~LShift")&&(A_TimeSincePriorHotkey
とりあえず作ってみた。
大文字を入力するときに押していたShiftを放したときにも誤作動すると困るので、短く押したときにだけ動作するようにした。
しかし、なぜか長く押したときにも発生する。
どうやら、ShiftキーのキーリピートでLShiftのイベントが繰り返し発生していたのが原因。
しかし、Shiftを押しながら他のキーを押したときには発生しない。
他のキーが押された時点でキーリピートが終了するための模様。
図らずも希望の動作に近いものができた。
試作二号
ls_state=0
~LShift::
if ls_state=0
ls_state=1
else
ls_state=2
return
~Lshift Up::
if((ls_state=1)&&(A_TimeSincePriorHotkey
Shiftを長く押したときには発生しないようにしてみようと思い、キーリピートでのイベントを区別するようにしてみた。
Shiftを押してないときは0、最初にShiftを押すと1になり、キーリピートでのイベントでは2になる。
放すときに1なら動作を行い、0に戻す。
とりあえず大体うまくいった気がしたが、ATOKのShift+アルファベットキーで英字入力になる機能をShiftで解除する奴と重複して発生してしまうという問題が。
ATOKの方が通常入力に戻した後さらに切り替えを行って再び英字入力になってしまう。
仕方ないのでCtrlに割り当てることにした。
マウスジェスチャなどが生成するキーボードイベントで誤作動しないように、物理的な押し下げ状態をチェックするようにした。
最終版
ls_state=0
~LCtrl::
if ((ls_state=0)&&GetKeyState("LCtrl","P"))
ls_state=1
else
ls_state=2
return
~LCtrl Up::
if((ls_state=1)&&(A_TimeSincePriorHotkey
前 次