1. 使用Xaml創(chuàng)建應(yīng)用界面
打開visual studio,創(chuàng)建一個(gè)新的項(xiàng)目,在已安裝模板中選擇Visual C# →Wpf應(yīng)用。
完成創(chuàng)建后,我們得到如下圖所示的應(yīng)用界面。
wpf界面是基于xaml語言設(shè)計(jì)的,但是無需學(xué)習(xí)xaml,也可以用工具箱中的各種控件拖拽出不錯(cuò)的布局(就像拖拽winform的控件一樣)。再配合屬性面板,修改各個(gè)控件的屬性,很容易就得到一個(gè)還看得過去的GUI界面。
保存項(xiàng)目。在項(xiàng)目的目錄下找到MainWindows.xaml,將其復(fù)制一份,這個(gè)xaml文件將會(huì)成為powershell腳本應(yīng)用的GUI布局文件。
## 2. 編寫powershell腳本
新建powershell腳本。
首先引用wpf framework/core程序集,使得powershell腳本具備創(chuàng)建wpf應(yīng)用的能力。
Add-type -AssemblyName presentationframework, presentationcore
接著創(chuàng)建wpf對(duì)象。
$wpf = @{ }
?
在腳本中讀入xaml文件
$x = Split-Path -Parent $MyInvocation.MyCommand.Definition $path = $x + "
.\MainWindow.xaml" $inputXAML = Get-Content -Path $path $inputCleanXAML =
$inputXAML -replace 'mc:Ignorable="d"','' -replace "x:N",'N' -replace 'x:Class="
.*?"','' -replace 'd:DesignHeight="\d*?"','' -replace 'd:DesignWidth="\d*?"',''
幾個(gè)說明:
$x是該powershell腳本所在文件夾的絕對(duì)路徑,我將MainWindows.xaml放在與powershell腳本同級(jí)的文件夾下,使用
$MyInvocation.MyCommand.Definition獲取當(dāng)前運(yùn)行腳本所在路徑, Split-Path -Parent
$MyInvocation.MyCommand.Definition即可獲得當(dāng)前運(yùn)行腳本所在的文件夾路徑。
由于powershell只支持對(duì)xml的解析,所以需要對(duì)xaml稍微修改一下,使用-replace批量替換掉多余的字符。
$inputCleanXAML = $inputXAML -replace 'mc:Ignorable="d"','' -replace "x:N",'N'
-replace 'x:Class=".*?"','' -replace 'd:DesignHeight="\d*?"','' -replace
'd:DesignWidth="\d*?"',''
?
所有的xaml文件都可以使用這條語句來替換成xml。
緊接著使用xmlReader解析xml,創(chuàng)建窗體。
[xml]$xaml = $inputCleanXAML $reader = New-Object System.Xml.XmlNodeReader
$xaml $tempform = [Windows.Markup.XamlReader]::Load($reader)
遍歷完xml的節(jié)點(diǎn)后,調(diào)用$wpf.MainWindow.ShowDialog()就可以顯示GUI窗體了。
此時(shí)我們點(diǎn)擊窗體的按鈕,窗體還不會(huì)有反應(yīng),接下來添加交互邏輯。
添加如下語句
$wpf.Confirm.add_Click({ #TODO... })
?。ㄔ趬K內(nèi)添加單擊按鈕時(shí)你所需要執(zhí)行的邏輯。)
注意:我在創(chuàng)建wpf引用界面時(shí),創(chuàng)建了一個(gè)名為“Confirm”的按鈕,所以這里的add_Click({})對(duì)應(yīng)的就是該按鈕的點(diǎn)擊時(shí)引發(fā)的事件。
保存powershell腳本文件,點(diǎn)擊運(yùn)行,我們即可以得到一個(gè)GUI程序了,如下圖:
?
這個(gè)powershell腳本是我寫的一個(gè)文本解析器,先點(diǎn)擊More...按鈕打開文件選擇框,選擇一個(gè)*.mod的文本文件,然后點(diǎn)擊確定生成按鈕獲得變量列表--一個(gè)csv文件。
你可以在*https://github.com/Afuness/PowershellLab/tree/master/GUI*獲取源代碼。
熱門工具 換一換