/* ★★★仮想環境特有の症状★★★ ●CapsLockはvkF0sc03Aだが、仮想環境でvkかscの片方しか書けない。 ●また仮想環境では、条件にdownやupを書けない  a down::   XXXX  return のようにaのキーを押下された時点で動かすことはできない。 ●仮想環境はでTimer機能がつかえない ★★★無理やりCapsLockをCtrlにする方法★★★ 公式サイトでもレジストリを入れかえろと書いてある。 CapsLockはNumLockと同様のロック系なので、キーが押された入力はあっても、キーが話された(UPした) 入力信号はdriverレベルでとめる。 このためCapsLockを押された時刻を保存し、cとかvが押されたときに時刻を比較して短時間(現状は350m秒) 以内なら、コピーとか貼り付けとかの動作。CapsLockを押しながらの複数回に対応するため 時間の更新も行う ◆◆ただし、350m秒はずっと一つのキーを教えていると認識しなくなる →押し続けているときは550m秒ぐらいで ◆◆Down信号がでるため(VMの仕様?)かといって550m秒だと長すぎるので、押し続ける可能性があるDとHだけは ◆◆直前入力のキーをチェックするロジックに変更 ------------------------------------------------------------ ------------------------------------------------------------ */ #UseHook ;そのキー自身をSendしても無限ループにならないように #MenuMaskKey vk07 ; vk07 は未アサインだから。blindをCtrlキーでやらないように ←これがないとエクセルなどで誤操作 #Persistent ;大域変数の初期値設定 IdleTime := 350 ;Ctrlの保持時間 ★★★動作に上具合あるときはこの値を変更のこと MyTime := 0 ; return ;設定変更したときの再読み込み。動作がおかしいときの停止 ^F3::reload ^F4::suspend ;-----------------------------------------------------CapsLockの捕捉 vkF0:: MyTime := A_TickCount ;今の時刻(OS起動後の経過時間・ミリ秒) return ;-----------------------------------------------------ctrlとの組み合わせ c:: if (A_TickCount - MyTime) > IdleTime { sendraw, c }else{ Send, ^c MyTime := A_TickCount } return v:: if (A_TickCount - MyTime) > IdleTime { sendraw, v }else{ Send, ^v MyTime := A_TickCount } return x:: if (A_TickCount - MyTime) > IdleTime { sendraw, x }else{ Send, ^x MyTime := A_TickCount } return s:: if (A_TickCount - MyTime) > IdleTime { send, s }else{ Send, ^s MyTime := A_TickCount } return y:: if (A_TickCount - MyTime) > IdleTime { send, y }else{ Send, ^y MyTime := A_TickCount } return z:: if (A_TickCount - MyTime) > IdleTime { send, z }else{ Send, ^z MyTime := A_TickCount } return f:: if (A_TickCount - MyTime) > IdleTime { send, f }else{ Send, ^f MyTime := A_TickCount } return ;-----------------------------------------------------Emacsバインド ;◆◆特別対応 d:: if ((A_TickCount - MyTime) > (IdleTime + 200 )) { sendraw, d }else{ Send, {Del} MyTime := A_TickCount } return ;◆◆特別対応 h:: if ((A_TickCount - MyTime) > (IdleTime + 200 )) { sendraw, h }else{ Send, {BS} MyTime := A_TickCount } return a:: if (A_TickCount - MyTime) > IdleTime { sendraw, a }else{ Send, {Home} MyTime := A_TickCount } return e:: if (A_TickCount - MyTime) > IdleTime { sendraw, e }else{ Send, {End} MyTime := A_TickCount } return ;-----------------------------------------------------矢印 hjklの横一列配置は体に合わない i:: if (A_TickCount - MyTime) > IdleTime { sendraw, i }else{ Send, {UP} MyTime := A_TickCount } return j:: if (A_TickCount - MyTime) > IdleTime { sendraw, j }else{ Send, {Left} MyTime := A_TickCount } return k:: if (A_TickCount - MyTime) > IdleTime { sendraw, k }else{ Send, {Down} MyTime := A_TickCount } return l:: if (A_TickCount - MyTime) > IdleTime { sendraw, l }else{ Send, {Right} MyTime := A_TickCount } return ;Ctrlとカンマでshift+右矢印 sc033:: vkBC:: if (A_TickCount - MyTime) > IdleTime { send, {,} }else{ Send, +{Right} MyTime := A_TickCount } return ;-----------------------------------------------------Rubyの松本氏推奨 ; [;]をEnteにする $`;:: $vkBB:: send,{Enter} return ;Altと組み合わせたらセミコロン !`;:: !vkBB:: send,{;} return ;もしくはコロンの連打で;になるように ~`::: ~vkBA:: If (A_PriorHotKey == A_ThisHotKey and A_TimeSincePriorHotkey < 200) { SendInput, {BackSpace 2} Send,{`;} } Return ;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━■括弧対応 ;括弧系の開始を2連打で終了入力およびカーソル真ん中 ; ⇒「~《はイベントを乗っ取らず、そのままシステムに通す。(NT系専用)→入力されたキーコードは画面にも出力される ~+8:: If (A_PriorHotKey == A_ThisHotKey and A_TimeSincePriorHotkey < 200) { SendInput, {BackSpace 2} Send,{`(}{`)}{Left} } Return ~[:: If (A_PriorHotKey == A_ThisHotKey and A_TimeSincePriorHotkey < 200) { SendInput, {BackSpace 2} Send,{[}{]}}{Left} } Return ~+[:: If (A_PriorHotKey == A_ThisHotKey and A_TimeSincePriorHotkey < 200) { SendInput, {BackSpace 2} Send,{`{}{`}}}{Left} } Return ;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━その他 ;"Pause"キーでその時点のアクティブウィンドウを最前面に固定/解除する設定。Win10では動く ;~Pause::WinSet, AlwaysOnTop, toggle, A ;IMEの単語登録を高速化 →!W ★IMEが起動時のみ  !w:: Send,{Blind}{Ctrl down} Send,{Blind}{F10 down} send,{Blind}{o} Send,{Blind}{F10 up} Send,{Blind}{Ctrl up} return