C#と諸々

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

2006/12/02 03:00


この記事で公開しているファイルは、古い形式となっております。
今後は、全ての自作コマンドレットを、「YokoKen.PowerShell.Utility.dll」として、こちらの記事で公開します。




PowerShellで表示させたWindowsフォームを、PowerShellから操作したい・・・!
ってことで、そんなコマンドレットを作ってみた。

1. Download
2. インストール方法
3. 使い方
4. 使用例


【 1. Download 】
以下のリンクをクリックするとDownloadページへ移動するので、移動先からダウンロードすること。

YokoKen.PowerShell.Forms.dll ( YKPSForms.zip )

ソース ( YKPSForms_src.zip )


【  2. インストール方法 】
[ 2.1 解凍 ]
ダウンロードしたファイル ( YKPSForms.zip ) を、解凍する。

[ 2.2 配置 ]
PowerShellのインストールフォルダ ( 通常はC:\Windows\system32\windowspowershell ) に、SnapInというフォルダを作成 ( ※1 ) し、解凍されたYokoKen.PowerShell.Forms.dllを置く。

[ 2.3 インストール ]
以下のコマンドをPowerShellで実行する。

&"$env:windir/Microsoft.NET/Framework/v2.0.50727/InstallUtil.exe" ($PSHome + "\SnapIn\YokoKen.PowerShell.Forms.dll");


※1 : 違うフォルダでも構わないが、違うフォルダにする場合、 [ 3. インストール ] のコマンドで指定するパスもそれに合わせて変えること。


【 3. 使い方 】
[ 3.1 スナップイン登録 ]
このコマンドレットを使うには、PowerShellの起動のたびに、以下のコマンドを実行してスナップイン登録する必要がある。

Add-PSSnapin "YokoKen.PowerShell.Forms";


[ 3.2 Run-Formコマンドレット ]

YokoKen.PowerShell.Formsには、Run-Formという名前のコマンドレットが用意されている。スナップイン登録を行うと、このRun-Formコマンドレットが使用可能になる。
以下は、Run-Formコマンドレットの構文。

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


Run-Formコマンドレットは、targetパラメータに指定したフォームオブジェクトを、別スレッド上で表示する。別スレッド上で表示されるため、PowerShellからフォームを操作することができる。


【 4. 使用例 】
こんな感じ。

# スナップイン登録
Add-PSSnapin "YokoKen.PowerShell.Forms";
# System.Windows.Forms.dllのロード
[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が入力待機状態となる。試しに以下のようなコマンドを実行してみると、PowerShellからフォームを操作できることが確認できる。

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


フォーム表示後のコントロールの追加は、以下のように、Invokeメソッドを使用して行う。
Invokeメソッドを使用しない場合、エラーとなってしまうので注意。
なお、関数をEventHandler型にキャストしているのは、関数 ( ScriptBlockオブジェクト ) はEventHandler型にのみしかキャストできないためである。

$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([EventHandler]{$sampleForm.Controls.Add($exitButton)})


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

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

タグ: .NET PowerShell











トラックバックURL↓
http://csharper.blog57.fc2.com/tb.php/54-078f2ffc

ここにもPowerShellな人が・・・
ここにもPowerShellな人が・・・

2006.12.04 14:12 | 中の技術日誌ブログ