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 后记

还比较简单吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值