|
|
Windows Form を作成してみよう(4/4) ( System.Windows.Forms ) |
H.Kamifuji . |
PowerShell では、System.Windows.Forms のアセンブリを利用して、Windows Form を作成できます。 VB や cpp + MFC などで、Windows Form 開発の経験者なら容易と考えます。未経験者なら、別のドキュメントなどを参照してからの方が良いと思います。 これらの情報の取得方法について説明します。 PowerShell 7.15 インストールに共ない見直します。 現在(2024/10/27)では、PowerShell 7.4.6 が最新のようです。見直しをはじめましたが、 何と、" > パイプ問題(?)"が 解 消 されています。 パイプ関連事項を見直します。 現在(2024/10/26)では、ImageMagick 7.1.1-39 が最新のようです。上位互換について確認します。 |
次の事例を実行してみよう。
# 詳細プロパティの取得
# シェルオブジェクトを作成
$Shell = New-Object -ComObject Shell.Application
# フォルダの指定
$Folder = $Shell.NameSpace((pwd).Path + "\Test")
# ファイルの指定
$File = $Folder.parseName("001.JPG")
# 詳細プロパティ(撮影日時)の取得
$GET = $Folder.GetDetailsOf($File,12)
Write-Host $GET
4行目では、シェルオブジェクトを作成しています。7行目では、ディレクトリのパスを $Folder に格納しています。 10行目では、ファイル名を $File に格納しています。 13行目では、12番目のファイルプロパティを取得しています。 15行目では、結果を PowerShell 画面に表示します。 それでは、実行してみましょう。下記のように撮影日時が表示されます。 2012/?11/?16 ??8:39 掲載当時(2016/07)は、正常に動作していたが、現在(2020/11)は、青色部のように、フルパスでしていしないと動作しない。 環境変化は、 PSVersion 5.0.10586.122 → 5.1.19041.610 OS Windows7 → Windows10上記を実行すると PowerShell 7.15 でも、正常(同様)に、実行されます。 ただし、utf-8 保存したファイル(.ps1)で、実行すること。 PowerShell 7.4.6 でも、同様です。 |
次の事例を実行してみよう。[Console]::Beep(262, 500) #ド [Console]::Beep(294, 500) #レ [Console]::Beep(330, 500) #ミ [Console]::Beep(349, 500) #ファ [Console]::Beep(392, 500) #ソ [Console]::Beep(440, 500) #ラ [Console]::Beep(494, 500) #シ [Console]::Beep(523, 999) #ド実行してみてください。 上記を実行すると PowerShell 7.15 でも、正常(同様)に、実行されます。 ただし、utf-8 保存したファイル(.ps1)で、実行すること。 PowerShell 7.4.6 でも、同様です。 |
次の事例を実行してみよう。[Console]::Beep(440,100) [Console]::Beep(494,100) [Console]::Beep(554,300) [Console]::Beep(494,100) [Console]::Beep(440,100) Start-Sleep -milliseconds 100 [Console]::Beep(440,100) [Console]::Beep(494,100) [Console]::Beep(554,100) [Console]::Beep(494,100) [Console]::Beep(440,100) [Console]::Beep(494,600)実行してみてください。 上記を実行すると PowerShell 7.15 でも、正常(同様)に、実行されます。 ただし、utf-8 保存したファイル(.ps1)で、実行すること。 PowerShell 7.4.6 でも、同様です。 |
次の事例を実行してみよう。for ($i = 0; $i -lt 100; $i ++) { [System.Console]::Beep(450, 110) [System.Console]::Beep(500, 110) [System.Console]::Beep(550, 110) [System.Console]::Beep(450, 110) [System.Console]::Beep(675, 200) [System.Console]::Beep(675, 200) [System.Console]::Beep(600, 300) [System.Console]::Beep(450, 110) [System.Console]::Beep(500, 110) [System.Console]::Beep(550, 110) [System.Console]::Beep(450, 110) [System.Console]::Beep(600, 200) [System.Console]::Beep(600, 200) [System.Console]::Beep(550, 300) [System.Console]::Beep(525, 110) [System.Console]::Beep(450, 300) [System.Console]::Beep(450, 110) [System.Console]::Beep(500, 110) [System.Console]::Beep(550, 110) [System.Console]::Beep(450, 110) [System.Console]::Beep(500, 400) [System.Console]::Beep(600, 300) [System.Console]::Beep(500, 400) [System.Console]::Beep(475, 200) [System.Console]::Beep(450, 200) [System.Console]::Beep(400, 200) [System.Console]::Beep(600, 500) [System.Console]::Beep(525, 500) [System.Console]::Beep(450, 110) [System.Console]::Beep(500, 110) [System.Console]::Beep(550, 110) [System.Console]::Beep(450, 110) [System.Console]::Beep(675, 200) [System.Console]::Beep(675, 200) [System.Console]::Beep(600, 300) [System.Console]::Beep(450, 110) [System.Console]::Beep(500, 110) [System.Console]::Beep(550, 110) [System.Console]::Beep(450, 110) [System.Console]::Beep(800, 200) [System.Console]::Beep(500, 200) [System.Console]::Beep(550, 300) [System.Console]::Beep(525, 110) [System.Console]::Beep(450, 300) [System.Console]::Beep(450, 110) [System.Console]::Beep(500, 110) [System.Console]::Beep(550, 110) [System.Console]::Beep(450, 110) [System.Console]::Beep(500, 400) [System.Console]::Beep(600, 300) [System.Console]::Beep(500, 400) [System.Console]::Beep(475, 200) [System.Console]::Beep(450, 200) [System.Console]::Beep(400, 200) [System.Console]::Beep(600, 500) [System.Console]::Beep(525, 500) $i }実行してみてください。 上記を実行すると PowerShell 7.15 でも、正常(同様)に、実行されます。 ただし、utf-8 保存したファイル(.ps1)で、実行すること。 PowerShell 7.4.6 でも、同様です。 |
次の事例を実行してみよう。# ユーザーフォームを作る - 基礎編 - # アセンブリの読み込み Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing # フォームの作成 $form = New-Object System.Windows.Forms.Form $form.Text = "入力" $form.Size = New-Object System.Drawing.Size(260,180) # OKボタンの設定 $OKButton = New-Object System.Windows.Forms.Button $OKButton.Location = New-Object System.Drawing.Point(40,100) $OKButton.Size = New-Object System.Drawing.Size(75,30) $OKButton.Text = "OK" $OKButton.DialogResult = "OK" # 列挙子名:None, OK, Cancel, Abort, Retry, Ignore, Yes, No # キャンセルボタンの設定 $CancelButton = New-Object System.Windows.Forms.Button $CancelButton.Location = New-Object System.Drawing.Point(130,100) $CancelButton.Size = New-Object System.Drawing.Size(75,30) $CancelButton.Text = "Cancel" $CancelButton.DialogResult = "Cancel" # 列挙子名:None, OK, Cancel, Abort, Retry, Ignore, Yes, No # ラベルの設定 $label = New-Object System.Windows.Forms.Label $label.Location = New-Object System.Drawing.Point(10,30) $label.Size = New-Object System.Drawing.Size(250,20) $label.Text = "好きな言葉を入力してください" # 入力ボックスの設定 $textBox = New-Object System.Windows.Forms.TextBox $textBox.Location = New-Object System.Drawing.Point(10,70) $textBox.Size = New-Object System.Drawing.Size(225,50) # KeyDownイベントの記述方法 $Event = { $PushKey = $_.KeyCode [System.Windows.Forms.MessageBox]::Show("押されたキーは:${PushKey}です", "結果") } $textBox.Add_KeyDown($Event) # キーとボタンの関係 # $form.AcceptButton = $OKButton # $form.CancelButton = $CancelButton # ボタン等をフォームに追加 $form.Controls.Add($OKButton) $form.Controls.Add($CancelButton) $form.Controls.Add($label) $form.Controls.Add($textBox) # フォームを表示させ、その結果を受け取る $result = $form.ShowDialog() # 結果による処理分岐 if ($result -eq "OK") { $x = $textBox.Text $x }この事例は、ユーザーフォーム ... 基礎編 に対して、KeyDownイベントを追加しました。 39〜44行で、KeyDownイベントを設定しています。KeyDown 時のキー名をメッセージボックスで表示します。 それでは、実行してみましょう。 下記のような Windows 画面が表示されます。[ X ] ボタンをクリックして、閉じて下さい。 a上記を実行すると PowerShell 7.15 でも、正常(同様)に、実行されます。 ただし、utf-8 保存したファイル(.ps1)で、実行すること。 PowerShell 7.4.6 でも、同様です。 |