4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IPFactoryAdvent Calendar 2023

Day 2

マウススクロールで音量調整+インジケータ機能を作る

Last updated at Posted at 2023-12-01

IPFactory Advent Calender 2023 2日目の記事です。

今回はahk(AutoHotkey)で動くMouse Gesture Lを使って作った、個人的に便利なものを紹介しようと思います。

はじめに

今回作るものの動作はこんな感じです。
動作の様子.gif

マウスの第4ボタンを押した状態でマウスホイールを回転させると、PCの音量調整と画面右下インジケーターによる音量確認ができる、といったものとなっています。

また3ボタンマウスでも、音量調整のトリガーを任意のボタンにすることが可能です。

実行環境

OS: Windows11
ソフト: MouseGestureL.ahk Ver. 1.40 (2022/06/22)
マウス: 5ボタンマウス

0.MouseGestureLの導入

ダウンロードは以下のサイトから。

【動作環境】(readmeより引用)
MouseGestureL.ahkは、Unicode版のAutoHotkey上で動作します。
Windows XP / 2003 / Vista / 7 / 8 / 10 / 11 (32-bit、64-bit両対応)

インストール方法(readmeより引用) 解凍したファイルを任意のフォルダへコピーしてください。

◆AutoHotkeyがインストールされている場合
MouseGestureL.ahkを起動してください。

◆AutoHotkeyがインストールされていない場合
同梱の「Setup.vbs」を実行してください。AutoHotkeyをインストールすること
なくMouseGestureL.ahkを使用することが出来ます。
ポータブルで利用する場合も同様の手順で導入してください。

インストール後の使用方法はヘルプを参照してください。
アップデート時は全ファイルを上書きでコピーした後、トレイアイコンのメニュー内に
ある「再起動」を実行してください。
アンインストールはフォルダごと削除するだけです。レジストリは使用しません。

1.ジェスチャーの設定

タスクバーのインジケーターから設定画面を開き、
「ジェスチャー」タブで次のように操作します。
簡単です。

スクリーンショット 2023-12-01 131556_small.png

もしくは、以下のコードをコピーし画面左下「クリップボードからインポート」でも可能です。

音量アップ/ダウン
[SoundVolume_Up]
G=X1B_WU_

[SoundVolume_Down]
G=X1B_WD_

手順

  • 左上「追加」ボタンでジェスチャーを追加
  • ジェスチャー名を変更(今回はSoundVolume_Upを設定しました)
  • 第4ボタン→ホイール上回転 をダブルクリックで追加(直接編集もできます)
  • 中央付近「追加」ボタンで登録

こうして音量アップのジェスチャーX1B_WU_を登録できたかと思います。
トリガー変更はこのX1B_の部分を変えてください。
ちなみに第6ボタン以降の登録は、すこし手間がかかりそうです..

ついでに音量ダウンのジェスチャーも作ってしまいましょう

2.音量調整機能

次はauto hotkeyの言語で音量調整を書いていきます。
ここも簡単です。

ジェスチャー一覧から先ほどのSoundVolume_UpとDownを追加し、それぞれアクションスクリプトに入力します。保存時は「適用」→「OK」を忘れずに!

SoundVolume_Up
;ボリューム+2
SoundSet, +4, MASTER, VOLUME
SoundVolume_Down
;ボリューム-2
SoundSet, -4, MASTER, VOLUME

これで、ホイールを回すとPCの音量が変わっていることが確認できたかと思います。

音量を変えるだけなら簡単ですね。
ここではスクロール毎、4%単位で音量を変えています。もちろんカスタム可。

次からがこだわったポイントです。

3.音量インジケータ機能

本題です。

音量を取得

インジケーターを作るにあたって、まず現在音量の取得をします。

Up/Down共通
;MASTERボリュームを取得、変数OutputVarに代入し、四捨五入
SoundGet, OutputVar, MASTER
OutputVar := Round(OutputVar)

表示

表示にわざわざウィンドウなんぞ使わないので、ツールチップを使用します。

  1. ツールチップの出現座標の基準値をCoordModeで指定
  2. ツールチップを表示 pyで言うところのf'音量:{OutputVar}%'を、指定座標に表示する
Up/Down共通
CoordMode, ToolTip, Screen
ToolTip, 音量:%OutputVar%`%, 3000, 2000

image.png

ついに画面右下に表示が!
でも消えませんね。

タイマー・時間経過で消去

  1. "RemoveToolTip"という、ツールチップを消去=空にする処理を作成
  2. SetTimerを使い、1.5秒後にRemoveToolTipを実行するよう設定
  3. またタイマーが継続して動くよう、#Persistentを記述し常駐モードにする。
Upのみ
#Persistent
CoordMode, ToolTip, Screen
ToolTip, 音量:%OutputVar%`%, 3000, 2000
SetTimer, RemoveToolTip, 1500
Return

RemoveToolTip:
SetTimer, RemoveToolTip, Off
ToolTip
Return
Downのみ
#Persistent
CoordMode, ToolTip, Screen
ToolTip, 音量:%OutputVar%`%, 3000, 2000
SetTimer, RemoveToolTip2, 1500
Return

RemoveToolTip2:
SetTimer, RemoveToolTip2, Off
ToolTip
Return

UpとDownで内容を少し変えました。
これは、UpとDownで消去タイマー用関数の名前とを分けているだけです。
何かが競合するらしく、エラーが起きることによる処置です。

これで、無事にインジケーターを閉じることができました。

4.完成品・おわりに

最終的に完成したコードはこちらになります。
利用・改変はご自由に!

SoundVolume_Up
;ボリューム+2
SoundSet, +4, MASTER, VOLUME

SoundGet, OutputVar, MASTER
OutputVar := Round(OutputVar)

#Persistent
CoordMode, ToolTip, Screen
ToolTip, 音量:%OutputVar%`%, 3000, 2000
SetTimer, RemoveToolTip, 1500
Return

RemoveToolTip:
SetTimer, RemoveToolTip, Off
ToolTip
Return
SoundVolume_Down
;ボリューム-2
SoundSet, -4, MASTER, VOLUME

SoundGet, OutputVar, MASTER
OutputVar := Round(OutputVar)

#Persistent
CoordMode, ToolTip, Screen
ToolTip, 音量:%OutputVar%`%, 3000, 2000
SetTimer, RemoveToolTip2, 1500
Return

RemoveToolTip2:
SetTimer, RemoveToolTip2, Off
ToolTip
Return

この記事をご覧いただき、ありがとうございます。
いかがだったでしょうか。自分はこの機能のおかげで曲の音量を瞬時に変えられてQOL爆上がりしたので、ぜひ皆様にもこんな可能性を知ってほしいと思い書かせていただきました。

Mouse Gesture Lはいいぞ。

コード画面のプリセットにあるahkコードだけでも、簡単に便利な機能を作れてしまいます。

  • ブラウザ上でマウスをドラッグするだけで、Ctrl+TabCtrl+Shift+Tabを発生させタブ切替、とか。
  • 右クリックと中クリック同時押しで、曲や動画を再生/一時停止、とか。
  • カーソルを画面右端に当ててシャカシャカするだけで、Ctrl+Win+Right仮想デスクトップを左右に動き回れたり、とか。

今回のを除けば、最後のが一番便利です。特にデュアルモニタがないノートでは!
ならびにこれを動かしているAutoHotkey自体も、いつかは使いこなせるようになってみたい。

どうやら先駆者様が、こうした便利機能の豊富なアイデアをまとめてくださっているみたいです。

※うまくいかない場合

  • UpとDownで全く同じスクリプトを入れた
    • タイマー処理の名前の重複が起こっているかもしれません。
  • ツールチップの座標設定
    • 画面外かもしれません。設定解像度より130px左、20px上に設定するのがオススメです。
  • ジェスチャの末尾の_が多い
    • 一つ多いと、「第四ボタンを離す」までが一連のトリガーと認識されてしまいます。

なにか気になる点などありましたら、どうぞお気軽にご指摘いただければ幸いです。
ありがとうございました!

コードを書くにあたって参考にしたサイト
AutoHotkey 非公式ドキュメンテーションWiki https://ahkwiki.net/Commands_Category

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?