GUI打开时播放声音

时间:2017-10-27 06:48:35

标签: windows forms powershell

只要GUI处于打开状态,我就会尝试播放声音,但由于我不熟悉powershell,我需要帮助..

现在我有这个:

$sound = New-Object System.Media.SoundPlayer
$sound.SoundLocation="c:\WINDOWS\Media\ringout.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 = 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

我还尝试使用ifwhile循环,但没有成功。有什么想法吗?

1 个答案:

答案 0 :(得分:-1)

首先要做的事情。 Form.Show()$Form.ShowDialog()之间存在重要差异。虽然Show()将立即返回,但后者在Dialog完成时等待。所以,如果你在ShowDialog()之前开始播放音乐并在那之后停止音乐,我就不知道为什么它不应该工作。

根据您的需要,您可能会events。使用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:\WINDOWS\Media\ringout.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)

这很容易让我们重用这些方法(例如用于其他对话和操作)