まずは動作確認の為、VisualStudio でコードを完成させます。
using System; using System.IO; using System.Windows.Forms; namespace MessageBoxConsole { class Program { static void Main(string[] args) { // テンポラリフォルダのパスを取得 string path = Environment.GetEnvironmentVariable("temp"); // 書き込むファイルのフルパスを編集する string writePath = $@"{path}\_check_result"; // MessageBox を表示する( System.Windows.Forms の参照が必要です ) // ※ OK か Cancel のボタンが表示されます DialogResult check = MessageBox.Show("実行しますか?", "確認", MessageBoxButtons.OKCancel); using (StreamWriter sw = new StreamWriter(writePath, false)) { // OK ならば、ファイルに 1 を書き込みます if (check == DialogResult.OK) { sw.Write("1"); } // CANCEL ならば、ファイルに 0 を書き込みます else { sw.Write("0"); } // ファイルを閉じます sw.Close(); } } } }
▼ System.Windows.Forms の参照 次に PowerShell のスクリプトを作成して C# のコードを実行させます。その為に、PowerShell でスクリプトの実行を許可する手順 で設定を済ませておきます。 msgbox.ps1
$code = @" using System; using System.IO; using System.Windows.Forms; public class MyClass { public static void Main() { // テンポラリフォルダのパスを取得 string path = Environment.GetEnvironmentVariable("temp"); // 書き込むファイルのフルパスを編集する string writePath = string.Format( @"{0}\_check_result", path ); // MessageBox を表示する( System.Windows.Forms の参照が必要です ) // ※ OK か Cancel のボタンが表示されます DialogResult check = MessageBox.Show("実行しますか?", "確認", MessageBoxButtons.OKCancel); using (StreamWriter sw = new StreamWriter(writePath, false)) { // OK ならば、ファイルに 1 を書き込みます if (check == DialogResult.OK) { sw.Write("1"); } // CANCEL ならば、ファイルに 0 を書き込みます else { sw.Write("0"); } // ファイルを閉じます sw.Close(); } } } "@ Add-Type -Language CSharp -TypeDefinition $code -ReferencedAssemblies ("System.Windows.Forms") [MyClass]::Main()
テキストファイルに結果を出力しているので、以下のようなバッチファイルで利用する事ができます
echo off echo 処理を開始しました powershell .\msgbox.ps1 FOR /F %%i IN (%temp%\_check_result) DO ( if "%%i"=="1" goto :ok if "%%i"=="0" goto :cancel ) :ok echo OK を選択しました goto :end :cancel echo Cancel を選択しました goto :end :end