まずは動作確認の為、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
次に PowerShell のスクリプトを作成して C# のコードを実行させます。その為に、