|
|
|||||||||||||||||||||||||||||
|
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 でも、同様です。 |