【发布时间】:2026-01-12 14:30:01
【问题描述】:
在 PowerShell 5.1.18362.752 中,当我尝试执行以下操作时:
Add-Type -AssemblyName System.Speech; $x = New-Object System.Speech.Synthesis.SpeechSynthesizer; $x.Speak('Hello. This is a sentence.')
我似乎无法在它说话的时候用 Ctrl+C 打断它。整个输入被大声读出。有没有办法在它自己完成之前阻止它?我知道我可以关闭 PowerShell 立即停止语音,但我正在寻找更优雅的东西,特别是因为我的 PS 需要一秒或多秒才能重新启动——对于我的用例,我需要能够快速中断语音无需用户等待几秒钟即可启动另一个。
【问题讨论】:
-
顺便说一句:无法使用 Ctrl-C 适用于 PowerShell 中的任何(长时间运行的、同步的).NET 方法调用,从 7.0 开始 - 请参阅 this answer。
-
另一边:这就是您通过
SAPI.SpVoice执行此操作的方式(这是您必须在PowerShell Core 中使用的,而System.Speech.Synthesis.SpeechSynthesizer不是支持):$tts = New-Object -ComObject SAPI.SpVoice; $tts.speak('Hello. This is a sentence.', 1); Start-Sleep -Milliseconds 300; $tts.Speak('', 2)