あらかじめ日記

雑記とかブログで使えるスクリプトとかテクニックとか。その他、音楽やアニメ、漫画の話題とかも。

AutoHotKeyで「かざぐるマウス」の代替をしてみる

前回からの続きです。

allthewayfrom.hatenablog.com

AutoHotKeyマウスジェスチャー以外にも、もちろん色々使えるので便利です。


 自分もいくつか入れていますが、ミスの防止系が結構良いです。
(キーの割り当てつつ何も“設定しない”ことで通常の処理を行わないようにできます)

例えば、フォルダの中のファイルを選択して削除しているつもりが、実はツリー上のフォルダにフォーカスが当たっていて勢い余って削除してしまうのことが稀にあるので「ツリー上のShift+Delete」を防止したり。

サンプルはこのような感じになります。

#IfWinActive ahk_class CabinetWClass
+Delete::
ControlGetFocus, Focus, A
If (Focus == "SysTreeView321") {
	TrayTip, 警告, ツリー上での削除はできません。
}
Else
	Send, +{Delete}
Return

スクリプトの説明は割愛します。

また上記を応用して、WindowsエクスプローラExcelはセル上でF2を押すと、名前変更だったり、セル内にフォーカスが入って操作することが出来ますが、誤って隣のF1を押してしまいがちで、F1に割りあたってるヘルプが立ち上がってしまい非常に鬱陶しい、、のでそれを防止するスクリプトも入れています。


さて本題ですが、他に公開されているスクリプトの中で便利なのが「WheelAccel」です。

d.hatena.ne.jp

マウスホイールの動作を、アクティブなウインドウではなくカーソル直下のウィンドウに送れるスクリプト
さらにに、ホイールの回転数に応じてホイールの移動量を加速させることもできます。

以前に「かざぐるマウス」と言う、マウスホイールによるウィンドウのアクティブ化、さらに特定のウィンドウに限ってマウスジェスチャーの設定も出来た非常に便利なツールが存在したのですが、現在は開発が止まり公開しているページも無くなってしまいました。

それの類似機能として、このWheelAccelを利用できます。

ただしそのまま導入するだけではダメで、このスクリプトはホイール操作を直下のウィンドウに“送るだけ”。ウィンドウをアクティブまでしてくれないので、少し手を加えます。

WheelAccel.ahkテキストエディタで開き、160行目当たりに以下を追記します。

    IfWinNotActive, ahk_id %hwnd%
    {
        WinActivate, ahk_id %hwnd%
    }


これ以前の処理で、hwndにカーソル直下のウィンドウを取得しているので、アクティブでなければアクティブにする、と言う処理を加えます。


さらに「かざぐるマウス」では、タスクバー上のアプリケーションでホイールスクロールすると、そのアプリケーションを最大化/最小化をさせることが出来ました。
これも実現させて見ます。

ただ、カーソル直下のタスクバー上のアプリケーションを特定する術は、自分の知識では無理でした。。
ですので、簡易的にスクロール動作をクリックに置き換えることで対応してみました。

※クリック動作なので、起動しているアプリケーションのアイコンは問題ないのですが、未起動でランチャーとしておいてあるアイコン上でホイールを回してしまうと、クリック=起動になってしまうのは注意事項です。苦笑

↑で追加したスクリプトの直前くらいに以下を追記します。

    if(ccls="MSTaskListWClass"){
        MouseClick, left,,, 1
        return
    }



これ以前の処理で、cclsにはカーソル直下のコントロール名を取得しているので、タスクバーだったら左クリック動作をする、と言う処理を加えただけです。


他、タスクバーの時計の領域をホイールスクロールでボリュームの変更も実現できます。

同様に追加したスクリプトの直前くらいに以下を追記します。

    if(ccls="TrayClockWClass"){
        if(dir=0)
            Send,{Volume_Up 1}
        else if(dir=1)
            Send,{Volume_Down 1}
        else ifInstring A_ThisHotkey, WheelUp
            Send,{Volume_Up 1}
        else 
            Send,{Volume_Down 1}
        return
    }



あとスクロールを送る動作で、Excelが「ウィンドウ枠の固定」をされている時に、スクロールが上手く送れませんでした。
初期設定で、「互換モードで動かすコントロールのクラスリスト」に「Excel7」が含まれていますが、これを削除すれば一応動作するようになりましたので、もしかすると削除した方のが良いかもしれません。

スクリプトを自分で書く必要があるので、覚えるまで時間は掛かるかも知れませんが、探せば色々な方がサンプルを紹介しています。
使いこなせればかなり便利だと思うので、是非利用してみてください。

(不備・改善点などあればご指摘お願いします)