You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 10下无需nircmd,通过.bat/AHK脚本静音特定游戏(赛博朋克2077)的方案咨询

Windows 10下无需nircmd,通过.bat/AHK脚本静音特定游戏(赛博朋克2077)的方案咨询

我太懂这种糟心的感觉了!之前用nircmd对绝大多数程序都顺风顺水,唯独碰到赛博朋克2077这种会 spawn 子进程接管音频的顽固分子就卡壳,而且nircmd确实已经停更挺久了,换方案完全是明智之选。下面给你分享几个亲测在Win10上有效的.bat和AHK脚本方案,专门针对这种难搞的游戏:

一、AHK脚本方案(首推,无需额外工具,灵活度拉满)

AutoHotkey对窗口和系统音频的控制天生友好,不管赛博朋克是父进程还是子进程管音频,都能精准定位到对应的音频会话。

方案1:通过窗口标题触发静音(适合游戏前台运行时)

如果你的赛博朋克2077窗口标题固定是「Cyberpunk 2077」,可以用这个脚本,按Ctrl+Alt+M就能快速静音:

; 按Ctrl+Alt+M触发赛博朋克2077静音
^!m::  
    ; 获取游戏窗口对应的进程ID
    WinGet, gamePID, PID, Cyberpunk 2077  
    if (gamePID) {
        ; 遍历系统所有音频会话,找到对应PID的会话并静音
        asm := ComObjCreate("AudioSessionManager2")
        enumerator := asm.GetSessionEnumerator()
        enumerator.MoveFirst()
        loop {
            session := enumerator.GetSession()
            if (session.GetProcessID() = gamePID) {
                session.SimpleAudioVolume.SetMute(1, "")
                ToolTip, 赛博朋克2077已静音 😎
                SetTimer, ToolTip, -1500  ; 1.5秒后自动关闭提示
                break
            }
            ; 如果遍历到最后一个会话还没找到,就退出循环
            if !enumerator.MoveNext() {
                ToolTip, 未找到对应音频会话
                SetTimer, ToolTip, -1500
                break
            }
        }
    } else {
        ToolTip, 没找到赛博朋克2077的窗口哦
        SetTimer, ToolTip, -1500
    }
return

方案2:通过进程名静音(适合游戏后台运行时)

如果游戏最小化或者窗口标题有变化(比如带版本号),直接按进程名定位更靠谱,同样按Ctrl+Alt+M触发:

^!m::
    targetProcess := "Cyberpunk2077.exe"
    ; 检查进程是否存在
    Process, Exist, %targetProcess%
    gamePID := ErrorLevel
    if (gamePID) {
        asm := ComObjCreate("AudioSessionManager2")
        enumerator := asm.GetSessionEnumerator()
        enumerator.MoveFirst()
        loop {
            session := enumerator.GetSession()
            if (session.GetProcessID() = gamePID) {
                session.SimpleAudioVolume.SetMute(1, "")
                ToolTip, %targetProcess% 已静音
                SetTimer, ToolTip, -1500
                break
            }
            if !enumerator.MoveNext() {
                ToolTip, 未找到对应音频会话
                SetTimer, ToolTip, -1500
                break
            }
        }
    } else {
        ToolTip, 没找到%targetProcess%进程
        SetTimer, ToolTip, -1500
    }
return

二、纯.bat脚本方案(无需AHK,借助PowerShell)

如果不想装AHK,纯bat也能实现,本质是调用PowerShell来操作Windows的Core Audio API,创建一个MuteCyberpunk.bat文件,内容如下:

@echo off
setlocal enabledelayedexpansion

:: 替换成你找到的实际音频进程名(默认是Cyberpunk2077.exe)
set "TARGET_PROCESS=Cyberpunk2077.exe"

:: 调用PowerShell执行静音逻辑
powershell -Command "$procName = '%TARGET_PROCESS%'; $procs = Get-Process -Name $procName -ErrorAction SilentlyContinue; if ($procs) { foreach ($p in $procs) { $pid = $p.Id; $asm = [Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]'{BFA971F1-4D5E-40BB-935E-967039BFBEE4}')); $enum = $asm.GetSessionEnumerator(); $enum.MoveFirst(); do { $sess = $enum.GetSession(); if ($sess.GetProcessID() -eq $pid) { $vol = $sess.SimpleAudioVolume; $vol.SetMute($true, $null); echo '已静音进程: ' $p.Name ' (PID:' $pid ')'; break } } while ($enum.MoveNext()) } } else { echo '未找到名为' $procName '的进程' }"

:: 可选:暂停窗口看结果,不需要可以删掉下面这行
pause

关键小技巧:找到真正控制音频的进程

如果上面的脚本还是不行,大概率是你找错了实际管音频的进程,按这个步骤确认:

  1. 右键任务栏的音量图标 → 打开音量合成器
  2. 找到赛博朋克2077对应的音频条目
  3. 右键这个条目 → 点击「转到进程」
  4. 任务管理器会自动定位到对应的进程,把这个进程名替换到脚本里的目标进程名即可

备注:内容来源于stack exchange,提问作者Kalamalka Kid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 10:53:02