【发布时间】:2021-08-20 11:54:43
【问题描述】:
我有一个脚本可以在我离开计算机时关闭显示器(我想手动操作,是的)
简单如下:
timeout 5 /nobreak
echo Turning off...
powershell (Add-Type '[DllImport(\"user32.dll\")]^public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x0112,0xF170,2)
效果几乎很好,除了我打开(例如移动鼠标)时,cmd 窗口保持打开状态
现在我也想让电脑静音,所以我补充说:
powershell (Add-Type '[DllImport(\"user32.dll\")]^public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x319,-1,0x90000)
但是一旦一条指令被执行,它就不会继续到下一条
不知道我应该做什么或搜索...
【问题讨论】:
-
您似乎已经转义了双引号,即使它们没有嵌套在另一组双引号中,我认为这是不正确的。此外,由于单引号对 cmd.exe 没有什么特别的意义,(它们只是标准字符),您的插入符号
^可能会成为问题,因为这是 cmd 的特殊字符。 exe,(转义字符). -
在
cmd.exe中运行powershell.exe命令并不难。以%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -Command ""开始命令。然后在这两个双引号之间插入您的工作 PowerShell 命令。现在在运行它之前,您需要使用反斜杠转义任何插入的双引号,并使用另一个百分比字符来转义任何百分比字符。因此,如果以下在 PowerShell 中工作,Write-Host "foobar",您的命令在您的批处理文件…powershell.exe -Command "Write-Host \"foobar\""中将如下所示。 -
现在开始一个可执行文件,在本例中为
powershell.exe,但不要等到它完成,即继续运行下一个命令,您将使用start命令,即Start "" "%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -Command "Write-Host \"foobar\"".
标签: windows powershell cmd volume