サウンドやマイクのボリュームをタスクバー上でコントロールする
from AHKスクリプト
v2
code: volume_control.ahk
#Requires AutoHotkey v2.0
#SingleInstance Force
#Include <mouse_is>
#Include <tool_tip>
;--------------------------------------------------------------------
; サウンドやマイクのボリュームをタスクバー上でコントロールする
; ・マウスホイール上下でサウンドのボリュームを変更
; ・マウスホイールを押してマイクのON/OFFを切り替え
#HotIf MouseIsOver("ahk_class Shell_TrayWnd")
WheelUp::Send "{Volume_Up}"
WheelDown::Send "{Volume_Down}"
MButton::
{
MicDeviceName := ""
try {
MicDeviceName := GetMicDeviceName()
} catch TargetError as e {
; エラーをツールチップ表示して終了
AutoCloseToolTip(10000, e.Message)
return
}
if MicIsOn(MicDeviceName) {
; マイクがONの時、OFFにする
TurnOffMic(MicDeviceName)
AutoCloseToolTip(1500, "マイク OFF")
} else {
; マイクがOFFの時、ONをやめる
TurnOnMic(MicDeviceName)
AutoCloseToolTip(1500, "マイク ON")
}
return
}
;--------------------------------------------------------------------
; 存在するマイクデバイスを取得する
; ※日本簿または英語のみ対応。
; "Mic"または"マイク"を含むデバイスが見つからない場合、TargetErrorを返す。
; ※TargetError以外のエラーは組み込みのSoundGetName関数に準拠する。
GetMicDeviceName() {
MicDeviceNames := "Mic", "マイク"
nameFailed := ""
for (MicDeviceName in MicDeviceNames) {
try {
; デバイス名を返す
return SoundGetName( , MicDeviceName)
} catch TargetError as e {
; 存在しないデバイスをエラーメッセージに追加する
nameFailed := nameFailed = ""
? MicDeviceName
: nameFailed "`n" MicDeviceName
}
}
; マイクデバイスが存在しないのでエラーを投げる
throw TargetError("次の名前を含むマイク用デバイスが見つかりませんでした。`n" nameFailed)
}
;--------------------------------------------------------------------
; マイクONかどうかを確認する
MicIsOn(MicDeviceName) {
return !SoundGetMute( , MicDeviceName)
}
;--------------------------------------------------------------------
; マイクをONにする
TurnOnMic(MicDeviceName) {
SoundSetMute 0, , MicDeviceName
}
;--------------------------------------------------------------------
; マイクをOFFにする
TurnOffMic(MicDeviceName) {
SoundSetMute 1, , MicDeviceName
}
code: サウンドカード解析スクリプト.ahk
#Requires AutoHotkey v2.0
scGui := Gui(, "Sound Components")
scLV := scGui.Add('ListView', "w600 h400"
, "Component", "#", "Device", "Volume", "Mute")
devMap := Map()
loop
{
; For each loop iteration, try to get the corresponding device.
try
devName := SoundGetName(, dev := A_Index)
catch ; No more devices.
break
; Qualify names with ":index" where needed.
devName := Qualify(devName, devMap, dev)
; Retrieve master volume and mute setting, if possible.
vol := mute := ""
try vol := Round(SoundGetVolume( , dev), 2)
try mute := SoundGetMute( , dev)
; Display the master settings only if at least one was retrieved.
if vol != "" || mute != ""
scLV.Add("", "", dev, devName, vol, mute)
; For each component, first query its name.
cmpMap := Map()
loop
{
try
cmpName := SoundGetName(cmp := A_Index, dev)
catch
break
; Retrieve this component's volume and mute setting, if possible.
vol := mute := ""
try vol := Round(SoundGetVolume(cmp, dev), 2)
try mute := SoundGetMute(cmp, dev)
; Display this component even if it does not support volume or mute,
; since it likely supports other controls via SoundGetInterface().
scLV.Add("", Qualify(cmpName, cmpMap, A_Index), dev, devName, vol, mute)
}
}
loop 5
scLV.ModifyCol(A_Index, 'AutoHdr Logical')
scGui.Show()
; Qualifies full names with ":index" when needed.
Qualify(name, names, overallIndex)
{
if name = ''
return overallIndex
key := StrLower(name)
index := names.Has(key) ? ++nameskey : (nameskey := 1)
return (index > 1 || InStr(name, ':') || IsInteger(name)) ? name ':' index : name
}
サウンドカード解析スクリプトの情報元
Sound Functions | AutoHotkey v2
v1
作るのやめ。
その代わりv2をコンパイルしたexeをアップロード
volume_control.exe
注意点
マイクのデバイス名はMicまたはマイクを含むもののみに対応している
サウンドカード解析スクリプト.exe