実現したいこと
Powershellでバッチを1秒おきに実行し、戻り値を受け取ってウィンドウ(フォーム)に描画したい
発生している問題・分からないこと
バッチ実行→処理→描画はうまくいっているが、なぜかウィンドウにどの操作(ウィンドウを閉じる、動かす、最小化)をしても受け付けない
該当のソースコード
powershell(main.ps1)
1# アセンブリのロード 2Add-Type -AssemblyName System.Windows.Forms 3Add-Type -AssemblyName System.Drawing 4 5# ウィンドウの作成・表示 6$screen = New-Object System.Windows.Forms.Form 7$screen.Width = 640 8$screen.Height = 480 9$screen.Text = "New Window" 10$screen.Show() 11$screen.Activate() 12$hellolabel = New-Object System.Windows.Forms.Label 13$hellolabel.Text = "" 14$hellolabel.Location = New-Object System.Drawing.Point(0, 0) 15$hellolabel.Font = New-Object System.Drawing.Font("MS ゴシック", 20) 16$hellolabel.Size = New-Object System.Drawing.Point(500, 32) 17$hellolabel.TextAlign = [System.Drawing.ContentAlignment]::MiddleCenter 18$screen.Controls.Add($hellolabel) 19 20while(1){ 21 #batで処理をして、戻り値を取得 22 cmd.exe /c ".\main.bat" 23 if ($LASTEXITCODE -eq 1){ 24 $hellolabel.Text = "-" 25 }else{ 26 $hellolabel.Text = "インターネット接続中" 27 } 28 $screen.Controls.Add($hellolabel) 29 Write-Host $LASTEXITCODE 30 # ラベルの作成・表示 31 Start-Sleep -m 1000 # 1秒間の停止 32} 33 34#フォームが閉じられた(FormClosed)ときに、Runから抜ける 35Write-Host "イベントループから脱出しました" 36exit 37 38
bat
1@echo off 2set server_ip=8.8.8.8 3ping -n 1 -w 1000 %server_ip% >nul 4exit %errorlevel%
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
ウィンドウが応答するように直すには
[System.Windows.Forms.Application]::Run($screen)
をソースコードに入れるとうまくいくことが分かったが、これを実行するとほかの処理が停まってしまう
補足
windows10
powershell PSVersion 5.1.19041.5607

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2025/06/17 11:33