GUI打开,我就会尝试播放声音,但由于我不熟悉powershell,我需要帮助。
现在我有这个:
$sound = New-Object System.Media.SoundPlayer
$sound.SoundLocation="c:WINDOWSMediaringout.wav"
$Form.ShowDialog()
$sound.PlayLooping()
$flag=$false
1..10 | foreach {
if ($_ -gt 5) {
$flag=$true
}
else {
sleep -s 1
}
if($flag) {
$sound.Stop()
}
}
当然,它在我关闭此 GUI 后播放,如果我将$Form.ShowDialog()
放在最后,它将在 GUI 显示之前播放......GUI通过按钮关闭,简单的$Form.Close()
编辑($Form声明):
$Form = New-Object System.Windows.Forms.Form
$Form.Text = "ALERT"
$Form.StartPosition = "CenterScreen"
$Form.Topmost = $True
$Form.BackColor = "White"
$Form.AutoSize = $True
$Form.AutoSizeMode = "GrowAndShrink"
$Form.ControlBox = $false
我也尝试了if
和while
循环,但没有成功。有什么想法吗?
首先要做的事。Form.Show()
和$Form.ShowDialog()
之间有一个重要的区别。虽然Show()
将立即返回,但后者会等待对话框完成。所以,如果你在ShowDialog()
之前开始音乐,在那行之后停止它,我不知道,为什么它不应该工作。
根据您的需求,您可能会喜欢活动。使用 Form
s Load
事件在窗体加载时执行某些逻辑,并使用其 Closing
事件在窗体关闭时添加一些逻辑:
$Form = New-Object System.Windows.Forms.Form -Property @{
Text = "ALERT"
StartPosition = "CenterScreen"
Topmost = $True
BackColor = "White"
AutoSize = $True
AutoSizeMode = "GrowAndShrink"
ControlBox = $false
}
$sound = New-Object System.Media.SoundPlayer -Property @{SoundLocation = "c:WINDOWSMediaringout.wav"}
$Form.Add_Load({
$sound.PlayLooping()
})
$Form.Add_Closing({
$sound.Stop()
})
$Form.Show()
有人可能会认为,为了可读性和可重用性,以下内容效果更好:
[scriptblock]$startMusic = {
$sound.PlayLooping()
}
[scriptblock]$stopMusic = {
$sound.Stop()
}
$Form.Add_Load($startMusic)
$Form.Add_Closing($stopMusic)
这将很容易让我们重用这些方法(例如,用于其他对话框和操作)