C#と諸々

C#がメインで他もまぁ諸々なブログです
おかしなこと書いてたら指摘してくれると嬉しいです(´・∀・`)
つーかコメント欲しい(´・ω・`)

2006/12/15 00:36
PowerShellで表示させたWindowsフォームを、PowerShellから操作することを可能にするコマンドレットです。


【 0. 目次 】
1. Download
2. 解説
3. 使用例


【 1. Download 】
このコマンドレットは、YokoKen.PowerShell.Utilityというスナップインに含まれています。このスナップインは以下の記事にて公開しています。

YokoKen.PowerShell.Utility


【 2. 解説 】
[ 2.1 コマンド名 ]
このコマンドレットには、Run-Formという名前が付けられています。

[ 2.2 概要 ]
Run-Formコマンドレットは、指定したフォームオブジェクトを、別スレッド上で表示します。別スレッド上で表示されるため、表示中もPowerShellからフォームを操作することができます。

[ 2.3 構文 ]
Run-Formコマンドレットの構文は以下のようになっています。

Run-Form [-Target] <System.Windows.Forms.Form>


[  パラメータ  ]
・Target <System.Windows.Forms.Form>
対象となるフォームオブジェクトを指定します。
必須
:  true
位置 : 1
既定値 : -
パイプライン入力を許可する
: true (ByValue)
ワイルドカード文字を許可する : false
Nullを許可する : false


【 3. 使用例 】
以下の例のコマンドを実行すると、フォームが表示され、PowerShellが入力待機状態となります。

[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms");
$sampleForm = New-Object "System.Windows.Forms.Form";
$helloButton = New-Object "System.Windows.Forms.Button";
$helloButton.Text = "Click";
$helloButton.Location = New-Object "System.Drawing.Point" (50, 50);
$helloButton.Add_Click({[System.Windows.Forms.MessageBox]::Show("Hello Hoge !")});
$sampleForm.Controls.Add($helloButton);

# コマンドレット実行
Run-Form $sampleForm;


フォーム表示後、以下の例のコマンドを実行すると、PowerShellからフォームを操作できることが確認できます。

# フォームを最前面に固定
$sampleForm.TopMost = $True;
# フォームのタイトルを設定
$sampleForm.Text = "Sample Form";
# フォームの不透明度を設定
$sampleForm.Opacity = 0.5;
# フォームの位置を設定
$sampleForm.Location = New-Object "System.Drawing.Point" (0, 0);


フォーム表示後のコントロールの追加は、以下のように、Invokeメソッドを使用して行います。
Invokeメソッドを使用しない場合、エラーとなってしまうので注意してください。
なお、以下の例では、同じスナップインに含まれているConvertTo-Delegateコマンドレットを使用して、PowerShell関数をMethodInvokerにキャストしています。ConvertTo-Delegateコマンドレットに関しては、こちらの記事を参照してください。

$exitButton = New-Object "System.Windows.Forms.Button";
$exitButton.Text = "Exit";
$exitButton.Location = New-Object "System.Drawing.Point" (100, 100);
$exitButton.Add_Click({$sampleForm.Close()});
$sampleForm.Invoke((ConvertTo-Delegate {$sampleForm.Controls.Add($exitButton)} System.Windows.Forms.MethodInvoker))


フォームを閉じる時は、フォームの閉じるボタンから閉じることも、PowerShellから以下のコマンドを実行して閉じることもできます。

# フォームの破棄
$sampleForm.Dispose();











トラックバックURL↓
http://csharper.blog57.fc2.com/tb.php/65-924ee55b