使用AHK控制Opera GX浏览器独立音量的技术需求
AHK脚本:单独控制Opera GX浏览器音量
以下是适配Opera GX的AHK音量控制脚本,可在浏览器最小化时调节音量,基于Spotify版本修改而来:
If (!A_IsAdmin) { MsgBox 请以管理员身份运行脚本! ExitApp } Process Exist, OperaGX.exe ProcessId := ErrorLevel If (!ProcessId) { MsgBox Opera GX未运行! ExitApp } LCTRL & UP::SetAppVolume(ProcessId, GetAppVolume(ProcessId) + 5) LCTRL & DOWN::SetAppVolume(ProcessId, GetAppVolume(ProcessId) - 5) Return GetAppVolume(PID) { Local MasterVolume := "" IMMDeviceEnumerator := ComObjCreate("{BCDE0395-E52F-467C-8E3D-C4579291692E}", "{A95664D2-9614-4F35-A746-DE8DB63617E6}") DllCall(NumGet(NumGet(IMMDeviceEnumerator+0)+4*A_PtrSize), "UPtr", IMMDeviceEnumerator, "UInt", 0, "UInt", 1, "UPtrP", IMMDevice, "UInt") ObjRelease(IMMDeviceEnumerator) VarSetCapacity(GUID, 16) DllCall("Ole32.dll\CLSIDFromString", "Str", "{77AA99A0-1BD6-484F-8BC7-2C654C9A9B6F}", "UPtr", &GUID) DllCall(NumGet(NumGet(IMMDevice+0)+3*A_PtrSize), "UPtr", IMMDevice, "UPtr", &GUID, "UInt", 23, "UPtr", 0, "UPtrP", IAudioSessionManager2, "UInt") ObjRelease(IMMDevice) DllCall(NumGet(NumGet(IAudioSessionManager2+0)+5*A_PtrSize), "UPtr", IAudioSessionManager2, "UPtrP", IAudioSessionEnumerator, "UInt") ObjRelease(IAudioSessionManager2) DllCall(NumGet(NumGet(IAudioSessionEnumerator+0)+3*A_PtrSize), "UPtr", IAudioSessionEnumerator, "UIntP", SessionCount, "UInt") Loop % SessionCount { DllCall(NumGet(NumGet(IAudioSessionEnumerator+0)+4*A_PtrSize), "UPtr", IAudioSessionEnumerator, "Int", A_Index-1, "UPtrP", IAudioSessionControl, "UInt") IAudioSessionControl2 := ComObjQuery(IAudioSessionControl, "{BFB7FF88-7239-4FC9-8FA2-07C950BE9C6D}") ObjRelease(IAudioSessionControl) DllCall(NumGet(NumGet(IAudioSessionControl2+0)+14*A_PtrSize), "UPtr", IAudioSessionControl2, "UIntP", currentProcessId, "UInt") If (PID == currentProcessId) { ISimpleAudioVolume := ComObjQuery(IAudioSessionControl2, "{87CE5498-68D6-44E5-9215-6DA47EF883D8}") DllCall(NumGet(NumGet(ISimpleAudioVolume+0)+4*A_PtrSize), "UPtr", ISimpleAudioVolume, "FloatP", MasterVolume, "UInt") ObjRelease(ISimpleAudioVolume) } ObjRelease(IAudioSessionControl2) } ObjRelease(IAudioSessionEnumerator) Return Round(MasterVolume * 100) } SetAppVolume(PID, MasterVolume) { MasterVolume := MasterVolume > 100 ? 100 : MasterVolume < 0 ? 0 : MasterVolume IMMDeviceEnumerator := ComObjCreate("{BCDE0395-E52F-467C-8E3D-C4579291692E}", "{A95664D2-9614-4F35-A746-DE8DB63617E6}") DllCall(NumGet(NumGet(IMMDeviceEnumerator+0)+4*A_PtrSize), "UPtr", IMMDeviceEnumerator, "UInt", 0, "UInt", 1, "UPtrP", IMMDevice, "UInt") ObjRelease(IMMDeviceEnumerator) VarSetCapacity(GUID, 16) DllCall("Ole32.dll\CLSIDFromString", "Str", "{77AA99A0-1BD6-484F-8BC7-2C654C9A9B6F}", "UPtr", &GUID) DllCall(NumGet(NumGet(IMMDevice+0)+3*A_PtrSize), "UPtr", IMMDevice, "UPtr", &GUID, "UInt", 23, "UPtr", 0, "UPtrP", IAudioSessionManager2, "UInt") ObjRelease(IMMDevice) DllCall(NumGet(NumGet(IAudioSessionManager2+0)+5*A_PtrSize), "UPtr", IAudioSessionManager2, "UPtrP", IAudioSessionEnumerator, "UInt") ObjRelease(IAudioSessionManager2) DllCall(NumGet(NumGet(IAudioSessionEnumerator+0)+3*A_PtrSize), "UPtr", IAudioSessionEnumerator, "UIntP", SessionCount, "UInt") Loop % SessionCount { DllCall(NumGet(NumGet(IAudioSessionEnumerator+0)+4*A_PtrSize), "UPtr", IAudioSessionEnumerator, "Int", A_Index-1, "UPtrP", IAudioSessionControl, "UInt") IAudioSessionControl2 := ComObjQuery(IAudioSessionControl, "{BFB7FF88-7239-4FC9-8FA2-07C950BE9C6D}") ObjRelease(IAudioSessionControl) DllCall(NumGet(NumGet(IAudioSessionControl2+0)+14*A_PtrSize), "UPtr", IAudioSessionControl2, "UIntP", currentProcessId, "UInt") If (PID == currentProcessId) { ISimpleAudioVolume := ComObjQuery(IAudioSessionControl2, "{87CE5498-68D6-44E5-9215-6DA47EF883D8}") DllCall(NumGet(NumGet(ISimpleAudioVolume+0)+3*A_PtrSize), "UPtr", ISimpleAudioVolume, "Float", MasterVolume/100.0, "UPtr", 0, "UInt") ObjRelease(ISimpleAudioVolume) } ObjRelease(IAudioSessionControl2) } ObjRelease(IAudioSessionEnumerator) }
修改说明
仅需对原Spotify脚本做两处核心修改:
- 将进程检测的
Spotify.exe替换为Opera GX的进程名OperaGX.exe - 将提示文本中的"Spotify"对应改为"Opera GX",提升易用性
使用说明
- 脚本需以管理员身份运行,否则无法获取音频会话权限
- 快捷键:
左Ctrl + 上箭头增加音量(每次+5%),左Ctrl + 下箭头降低音量(每次-5%) - 若Opera GX未运行,脚本会弹出提示并退出
内容的提问来源于stack exchange,提问作者melone23
相关产品推荐
相关产品推荐

