2017-10-27 5 views
0

私はGUIが開いている限り、サウンドを再生しようとしていますが、私は、私は助けを必要とPowerShellに精通していないですと...GUIは今

開いているときにサウンドを再生する私はこれがあります。

$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を閉じた後にGUIが... GUIはボタンで閉じられている、シンプルな $Form.Close()

編集($フォームが表示されます前に、私は最後に$Form.ShowDialog()を置く場合は、それがプレーになります遊んだもちろん

宣言):

$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ループではなく、成功せずにも試してみました。何か案は?

+0

私たちが(他のダイアログとアクション用など)これらのメソッドを再利用できるようになりますなぜなら、少なくとも '$ Form' i宣言されていない。それが[Form](https://msdn.microsoft.com/en-us/library/system.windows.forms.form%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396)であると仮定すると、あなたはイベントハンドラについて聞いたことがありますか? '$ Form.add_Closing({<#Stuff#>}) – Clijsters

+0

@Clijsters私は$ form宣言を追加します – Frihu

答えて

-1

最初のものが最初です。 Form.Show()$Form.ShowDialog()の間には重要な違いがあります。 Show()は直ちに戻りますが、後者はDialogの完了を待ちます。だから、もしあなたがShowDialog()の前に音楽を始めると、その行の後でそれをやめると、私はそれがうまくいかない理由はわかりません。


eventsが必要です。フォームが閉じたときに、いくつかのロジックを追加するためのフォームをロードしながら、いくつかのロジックを実行し、そのClosingイベントにFormLoadイベントを使用します。

$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) 

これは、簡単に[MCVE](https://stackoverflow.com/help/mcve)を作成する方法を見てみましょう、まず

+0

これは働いています!これが私の必要なものです。 – Frihu

+0

ニース!私は本当に喜んで、(偶然に作用する)コードスニペットをコピー&ペーストするだけではなく、提供されたリンクを見て、この本当に有用な技術をよりよく理解することを望みます。 – Clijsters