2024年11月27日水曜日

コマンドプロンプトをDOS時代から使ってきましたが、より高度な操作が可能人あったのだと実感 ー PowerShellのフォーム(ウインドウズ)

       
冒頭の入力フォームは、Windowsに実装されたPowerShellで作ってみました。
どうも、ウインドウズには、この手のフォームのオカズが仕組んであるみたい。

エクセルのVBAを起動して、ユーザーフォームで作ったのとそっくりさんです。
というより、VBAがウインドウズのフォームを引っ張って来ているのでしょう。

今までは、エクセルのマクロに専念して、仕事でプログラムを組んできました。
ただ、開発されて既に三十年の言語ですから、64ビット化からも距離があるな。

マイクロソフトもOfficeにVBAを残すと言ってはいても、古めかしい感じです。
そう思うと、他に代用できるアプリがないかと、たどり着いたのがこの言語ね。

まあ、ウインドウズでアプリケーションソフトウェアを作るのが目的の言語だ。
簡易的なプログラミング言語と謳ってはおりますが、VBAよりは格段に難しい。

それでも、Linuxの記述とか面白半分で触っていたので、何とか勉強中なんだ。
要するに、Linux用のエイリアス(別名)のコマンドが搭載されていたりする。

加えて、斜め読みしていたC#言語の記述なんかと、雰囲気がよく似ています。
そこで、ネットから寸借したフォームのコードを、参考がてら紹介してみます。

入力ボックスに入力された値を、パワーシェルの画面に出力するだけのコード。
それでも、変数の設定になっていて、変数渡しの拡張性に期待しつつ奮闘中だ。

とうわけで、パワーシェルを起動させて、このコードを貼り付けてみて下さい。
次にエンターキーで実行すると、ちゃんと入力フォームもされるのが分かるな。

その一方で、VBAのユーザーフォームと違って、フォームの表示位置を細かく指定することができたりして、なかなか痒い所に手が届く記述なのだと、感心してしまう自分がいるのでした。

※サンプルコード
# ユーザーフォーム作成(ZIPファイルのフルパス入力)
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(280,200) 
      $form.StartPosition = "Manual"
        $form.Location = "100,100"
$OKButton = New-Object System.Windows.Forms.Button  #OKボタン設定
  $OKButton.Location = New-Object System.Drawing.Point(40,120)
    $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,120)
    $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(245,50) 
$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
}



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿