powershell/CMD 设置系统静音(全局)

powershell/CMD 设置系统静音(全局)

01 前言

由于自动化程序的需要,要把系统声音设置为静音状态(全局)。找了一下资料,可以通过API的方式实现,记录一下。

02 正文

环境

Windows 11, 64 bit
PSVersion 5.1

使用到win32的两个API:GetForegroundWindowSendMessageWpowershell版本代码如下:

<#
设置系统静音(全局)
by hokis
2024-11-20 19:28
#>
$code = @'
[DllImport("user32.dll")] 
public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
'@
#引入API
Add-Type -Namespace Windows -MemberDefinition $code -Name 'Windows'
#获取前台窗口句柄
[System.IntPtr]$wi = [Windows.Windows]::GetForegroundWindow()
#命令消息
$WM_APPCOMMAND = 0x319
#减小音量
$APPCOMMAND_VOLUME_DOWN = 0x090000
#增加音量
$APPCOMMAND_VOLUME_UP = 0x0a0000
#静音
$APPCOMMAND_VOLUME_MUTE = 0x80000
#先提高,确保当前处于有声音的状态
$ret=[Windows.Windows]::SendMessageW($wi,$WM_APPCOMMAND,$wi,$APPCOMMAND_VOLUME_UP)
#静音
$ret=[Windows.Windows]::SendMessageW($wi,$WM_APPCOMMAND,$wi,$APPCOMMAND_VOLUME_MUTE)
#最后降低,恢复为原来的音量大小
$ret=[Windows.Windows]::SendMessageW($wi,$WM_APPCOMMAND,$wi,$APPCOMMAND_VOLUME_DOWN)
Write-Host 'success.'

另存为run.ps1,右键,选择“使用PowerShell运行”即可

可以转为BAT脚本,另存为run.bat,双击运行即可,如下:

@echo off
rem created on 2024-11-20 19:39
chcp 65001
cls
cd /d %~dp0
powershell.exe -command "$_sb = [System.Text.StringBuilder]::new(); [void]$_sb.AppendLine('[DllImport('+[char]34+'user32.dll'+[char]34+')] public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);').AppendLine('[DllImport('+[char]34+'user32.dll'+[char]34+')] public static extern IntPtr GetForegroundWindow();'); Add-Type -Namespace Windows -MemberDefinition $_sb.ToString() -Name 'Windows'; [void]$_sb.Clear(); [System.IntPtr]$wi = [Windows.Windows]::GetForegroundWindow(); $WM_APPCOMMAND = 0x319; $APPCOMMAND_VOLUME_DOWN = 0x090000; $APPCOMMAND_VOLUME_UP = 0x0a0000; $APPCOMMAND_VOLUME_MUTE = 0x80000; $ret=[Windows.Windows]::SendMessageW($wi,$WM_APPCOMMAND,$wi,$APPCOMMAND_VOLUME_UP); $ret=[Windows.Windows]::SendMessageW($wi,$WM_APPCOMMAND,$wi,$APPCOMMAND_VOLUME_MUTE); $ret=[Windows.Windows]::SendMessageW($wi,$WM_APPCOMMAND,$wi,$APPCOMMAND_VOLUME_DOWN); Write-Host 'success.';"
pause

效果:
效果

03 后记

还比较简单吧。

<think>好的,用户想知道如何通过右键菜单启动CMDPowerShell或终端。我需要先回顾一下相关的引用资料,确保回答准确。 首先,引用[1]提到修改注册表键值,将Powershell改回CMD。这涉及到HKEY_CLASSES_ROOT\Directory\Background\shell\Powershell的位置,可能需要更改command的值。引用[2]和[3]则提供了更详细的步骤,包括使用管理员权限的CMDPowerShell执行命令来修改注册表。特别是引用[3]提到了Windows 11中如何显示所有右键菜单选项,通过运行命令reg add来调整。引用[4]中的手动注册DLL的方法可能也相关,但用户的问题更多是关于添加右键菜单项,而不仅仅是修复Bandizip的问题。 接下来,我需要整理步骤。对于Windows 10和11,方法可能不同。例如,在Windows 11中,默认右键菜单可能隐藏了CMDPowerShell,需要手动开启。用户可能需要以管理员身份运行命令提示符,输入特定的reg add命令来修改注册表,然后重启资源管理器。此外,对于添加终端(比如Windows Terminal),可能需要不同的注册表项。 需要注意的是,修改注册表有风险,必须提醒用户谨慎操作,并建议备份。同时,步骤中要区分管理员和非管理员权限的选项,引用[2]提到可以添加两种选项。另外,引用[4]中的regsvr32命令可能适用于某些程序,但CMD/PowerShell的添加更多是通过注册表编辑。 最后,生成相关问题时要考虑用户可能的后续疑问,比如恢复默认菜单、添加其他终端、处理权限问题等。</think>### 通过右键菜单启动 CMDPowerShell 或终端的配置方法 #### **Windows 10/11 通用方法** 1. **修改注册表直接显示选项** 以管理员身份打开 **CMD** 或 **PowerShell**,执行以下命令: ```cmd reg add "HKEY_CLASSES_ROOT\Directory\Background\shell\cmd" /v "ShowBasedOnVelocityId" /t REG_DWORD /d 1 /f ``` 重启资源管理器(任务管理器 > 右键“Windows 资源管理器” > 重新启动)或重启系统生效[^3]。 - 类似地,对 PowerShell 的注册表项执行相同操作: ```cmd reg add "HKEY_CLASSES_ROOT\Directory\Background\shell\Powershell" /v "ShowBasedOnVelocityId" /d 1 /t REG_DWORD /f ``` 2. **恢复默认右键菜单(仅限 Windows 11)** 若要恢复系统默认的简洁右键菜单,执行: ```cmd reg delete "HKEY_CLASSES_ROOT\Directory\Background\shell\cmd" /v "ShowBasedOnVelocityId" /f ``` --- #### **Windows 10 专用方法** 1. **通过注册表编辑器手动添加** - 按 `Win+R` 输入 `regedit`,导航到路径: `HKEY_CLASSES_ROOT\Directory\Background\shell` - 右键 `shell` 文件夹,新建项并命名为 `Open CMD Here` - 在新建项下创建子项 `command`,将其默认值设置为 `cmd.exe /s /k pushd "%V"`[^1][^2] - 类似地,为 PowerShell 创建注册表项,命令路径为 `powershell.exe -noexit -command Set-Location '%V'` --- #### **Windows Terminal 集成方法** 若已安装 **Windows Terminal**,可通过以下方式添加右键菜单: 1. 打开 Terminal 设置,进入 **“启动” > “右键菜单集成”**,启用选项 2. 或通过管理员 PowerShell 执行命令: ```powershell wt.exe --register-legacy-terminal-meny ``` --- #### **注意事项** - 修改注册表前建议备份(`文件 > 导出`) - 管理员权限与非管理员权限的右键菜单需分别配置 - 便携版软件(如 Bandizip)需手动注册 DLL 文件实现右键菜单[^4] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值