UWSCでPowershellを使ったフォームの表示
こんな記事を見つけた。
というか、検索するとGoogleの上位に出てくる。
UWSC4.6bのpowershell()関数 | たっぷす庵
調べたところとりあえず解決できそうなので、解決してみた。
UWSC v4.7にて、修正が入った。
そのため、全面更新。
なお、v4.7以降のみ対応とするなら、PowershellFormモジュールに内部変数は不要となる。
PowershellForm.uws
OPTION EXPLICIT IFB GET_UWSC_NAME = "PowershellForm.uws" THEN DIM formName = "PowerShellフォーム" TEXTBLOCK ps1 [Void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") #フォーム $form = New-Object Windows.Forms.Form $form.Text = "#$#$formName$#$#" $form.FormBorderStyle = [Windows.Forms.FormBorderStyle]::FixedSingle $form.StartPosition = [Windows.Forms.FormStartPosition]::CenterScreen #エディットボックス $edit = New-Object Windows.Forms.TextBox $edit.MultiLine = $true $edit.Size = $form.ClientSize $form.Controls.Add($edit) #[Windows.Forms.Application]::Run($form) #$form.Show() $form.ShowDialog() | out-null $edit.Text ENDTEXTBLOCK PRINT PowershellForm.Show(formName, REPLACE(ps1,"#$#$formName$#$#",formName)) ENDIF MODULE PowershellForm DIM _wait = TRUE DIM _result FUNCTION Show(title, pss) IFB GET_UWSC_VER >= 4.7 THEN THREAD PrivateShowWindow(title) RESULT = PrivateMakeForm(pss) ELSE // 4.6cでは、4.63と返ってきた _wait = TRUE THREAD PrivateMakeForm(pss) PrivateShowWindow(title) WHILE _wait SLEEP(0.1) WEND RESULT = _result ENDIF FEND FUNCTION PrivateMakeForm(pss) RESULT = POWERSHELL(pss, FALSE, FALSE) _result = RESULT _wait = FALSE FEND PROCEDURE PrivateShowWindow(title) CTRLWIN(GETID(title, "", -1), SHOW) FEND ENDMODULE