2015-08-17 51 views
0

我試圖在腳本仍在執行時將Powershell中的無控制窗口懸停在頂部。一旦餘下的代碼完成,我想刪除無控制窗口。使用功能時無法關閉Powershell中的表格

除了如何刪除窗口本身,我已經得到了一切。 $ Form.close()不起作用,如果我不得不猜測這是因爲它不能訪問函數中的$ Form。

所以我很茫然。我如何刪除窗口?

function goForm 
{ 
Add-Type -AssemblyName System.Windows.Forms 
$Label = New-Object System.Windows.Forms.Label 
$Label.AutoSize = $True 
$Label.Text = "This form is very simple. 
In some cases, it will be larger. 

And have spaces. 

Like this." 
$Form = New-Object System.Windows.Forms.Form 
$Form.Text = "Progress" 
$Form.SizeGripStyle = "Hide" 
$Form.AutoScroll = $True 
$Form.AutoSize = $True 
$Form.AutoSizeMode = "GrowAndShrink" 
$Form.MinimizeBox = $False 
$Form.MaximizeBox = $False 
$Form.Controlbox = $False 
$Form.WindowState = "Normal" 
$Font = New-Object System.Drawing.Font("Times New Roman",12, [System.Drawing.FontStyle]::Regular) 
$Form.Font = $Font 
$Form.StartPosition = "CenterScreen" 
$Form.Controls.Add($Label) 
$Form.Topmost = $True 
$Form.Add_Shown({$Form.Activate()}) 
$Form.ShowDialog() 
} 

start-job $function:goForm 

Start-Sleep -m 5000 

$Form.Close() 

[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
$oReturn=[System.Windows.Forms.Messagebox]::Show("The other window should be gone." , "") 

回答

0

如果您使用的啓動工作,在另一個PowerShell進程創建的形式,所以你不能在原來的PowerShell進程的變量訪問表單。但是,您不需要顯示此模式,因此您不需要使用Start-Job。只需使用.Show()而不是如:

Add-Type -AssemblyName System.Windows.Forms 
$Label = New-Object System.Windows.Forms.Label 
$Label.AutoSize = $True 
$Label.Text = @" 
This form is very simple. 
In some cases, it will be larger. 

And have spaces. 

Like this. 
"@ 
$Form = New-Object System.Windows.Forms.Form 
$Form.Text = "Progress" 
$Form.SizeGripStyle = "Hide" 
$Form.AutoScroll = $True 
$Form.AutoSize = $True 
$Form.AutoSizeMode = "GrowAndShrink" 
$Form.MinimizeBox = $False 
$Form.MaximizeBox = $False 
$Form.Controlbox = $False 
$Form.WindowState = "Normal" 
$Font = New-Object System.Drawing.Font("Times New Roman",12, [System.Drawing.FontStyle]::Regular) 
$Form.Font = $Font 
$Form.StartPosition = "CenterScreen" 
$Form.Controls.Add($Label) 
$Form.Topmost = $True 
$Form.Add_Shown({$Form.Activate()}) 

$Form.Show() 
$Form.Close() 
+0

我開始使用.Show之前使用.ShowDialog。它在PowerShell ISE中工作正常,但在外部運行時,對話框不顯示標籤或文本。所以盒子出現5秒鐘(從你的帖子中遺漏),但它是半透明的。沒有文字可見。 – Napabar

+0

不可否認,我只在PowerShell v5上試過這個,但在v5上它可以在控制檯上運行。你正在使用哪個版本的PowerShell?有一個版本,控制檯運行MTA,可能會導致問題。 –

+0

2.0。我更新到3,它運行良好。我的需求假定Windows 7的最低通用版PS。有沒有一種方法可以在內部將腳本切換爲以STA運行? – Napabar