シャットダウンダイアログを開く( VBscript, Jscript, C#, C# in PowerShell, PowerShell, PHP, Python, Ruby )

ALT + F4



デスクトップをクリックまたは、デスクトップだけを表示してこのショートカットで開きます。Windows のアプリケーションは通常このショートカットで終了します。(タイトルバーの左上のアイコンをクリックするとメニューが表示されてその中にあります)



VBScript

Shell.ShutdownWindows method

Jscript

C# : VisualStudio
01.using System;
02. 
03.namespace ShutdownDialog
04.{
05.        class Program
06.        {
07.                static void Main(string[] args)
08.                {
09.                        dynamic shell = Activator.CreateInstance(Type.GetTypeFromProgID("shell.application"));
10.                        shell.ShutdownWindows();
11. 
12.                }
13.        }
14.}

PowerShell 内で C#
01.$code = @"
02.using System;
03.public class MyClass {
04.        public static void Main() {
05. 
06.                dynamic shell = Activator.CreateInstance(Type.GetTypeFromProgID("shell.application"));
07.                shell.ShutdownWindows();
08. 
09.        }
10.}
11."@
12. 
13.Add-Type -Language CSharp -TypeDefinition $code -ReferencedAssemblies ("Microsoft.CSharp")
14. 
15.[MyClass]::Main()

PowerShell のみ

PHP

Python
1.import win32com.client
2.shell = win32com.client.Dispatch("shell.application")
3.shell.ShutdownWindows()

pywin32 が必要なので、こちらを参照してください

Ruby





C# を PowerShell で実行 : メッセージボックスの応答結果をファイルに書き込む ( バッチファイルで利用可能 )

まずは動作確認の為、VisualStudio でコードを完成させます。
01.using System;
02.using System.IO;
03.using System.Windows.Forms;
04. 
05.namespace MessageBoxConsole
06.{
07.        class Program
08.        {
09.                static void Main(string[] args)
10.                {
11.                        // テンポラリフォルダのパスを取得
12.                        string path = Environment.GetEnvironmentVariable("temp");
13. 
14.                        // 書き込むファイルのフルパスを編集する
15.                        string writePath = $@"{path}\_check_result";
16. 
17.                        // MessageBox を表示する( System.Windows.Forms の参照が必要です )
18.                        // ※ OK か Cancel のボタンが表示されます
19.                        DialogResult check = MessageBox.Show("実行しますか?", "確認", MessageBoxButtons.OKCancel);
20.                        using (StreamWriter sw = new StreamWriter(writePath, false))
21.                        {
22.                                // OK ならば、ファイルに 1 を書き込みます
23.                                if (check == DialogResult.OK)
24.                                {
25.                                        sw.Write("1");
26.                                }
27.                                // CANCEL ならば、ファイルに 0 を書き込みます
28.                                else
29.                                {
30.                                        sw.Write("0");
31.                                }
32. 
33.                                // ファイルを閉じます
34.                                sw.Close();
35. 
36.                        }
37.                }
38.        }
39.}

▼ System.Windows.Forms の参照


次に PowerShell のスクリプトを作成して C# のコードを実行させます。その為に、PowerShell でスクリプトの実行を許可する手順 で設定を済ませておきます。

msgbox.ps1
01.$code = @"
02.using System;
03.using System.IO;
04.using System.Windows.Forms;
05.public class MyClass {
06.        public static void Main() {
07. 
08.                // テンポラリフォルダのパスを取得
09.                string path = Environment.GetEnvironmentVariable("temp");
10. 
11.                // 書き込むファイルのフルパスを編集する
12.                string writePath = string.Format( @"{0}\_check_result", path );
13. 
14.                // MessageBox を表示する( System.Windows.Forms の参照が必要です )
15.                // ※ OK か Cancel のボタンが表示されます
16.                DialogResult check = MessageBox.Show("実行しますか?", "確認", MessageBoxButtons.OKCancel);
17.                using (StreamWriter sw = new StreamWriter(writePath, false))
18.                {
19.                        // OK ならば、ファイルに 1 を書き込みます
20.                        if (check == DialogResult.OK)
21.                        {
22.                                sw.Write("1");
23.                        }
24.                        // CANCEL ならば、ファイルに 0 を書き込みます
25.                        else
26.                        {
27.                                sw.Write("0");
28.                        }
29. 
30.                        // ファイルを閉じます
31.                        sw.Close();
32. 
33.                }
34. 
35.        }
36.}
37."@
38. 
39.Add-Type -Language CSharp -TypeDefinition $code -ReferencedAssemblies ("System.Windows.Forms")
40. 
41.[MyClass]::Main()

テキストファイルに結果を出力しているので、以下のようなバッチファイルで利用する事ができます
01.echo off
02. 
03.echo 処理を開始しました
04. 
05.powershell .\msgbox.ps1
06. 
07.FOR /F %%i IN (%temp%\_check_result) DO (
08.        if "%%i"=="1" goto :ok
09.        if "%%i"=="0" goto :cancel
10.)
11. 
12.:ok
13.echo OK を選択しました
14.goto :end
15. 
16.:cancel
17.echo Cancel を選択しました
18.goto :end
19. 
20. 
21.:end




PowerShell でスクリプトの実行を許可する手順

まず、PowerShell のスクリプトを作成して以下の内容を書き込みます

open-cur.ps1

$PSVersionTable
start .

start は、Start-Process のエイリアスで、この記述ではカレントフォルダをエクスプローラで開きます ( $PSVersionTable はバージョンの表示です )

スクリプトを保存したフォルダをエクスプローラで選択し、SHIFTキーを押しながら右クリックして『PowerShell ウインドウをここに開く』を選択します。

初期状態ではスクリプトの実行が許可されていないので、.\open-cur と入力してエラーが出る事を確認してから、ウインドウキー + I で設定ウインドウを開いて『更新とセキュリティ』を選択します。左サイドの内容の一覧から『開発者向け』を選んでかせ右サイドを一番したまでスクロールします。

PowerShell のスクリプトの実行が許可されていない場合は、チェックボックスが青色になっているのでその下の『適用』ボタンをクリックしてチェックボックスが灰色になれば設定は完了です。

.\open-cur と再度入力して結果を確認します

設定を元に戻すには

管理者権限で PowerShell のウインドウを開く必要があるので、CTRL + SHIFT で現在開いている PowerShell のウインドウのタスクバーのアイコンをクリックします。そして、以下のコマンドを入力してください

Set-ExecutionPolicy Restricted -Scope CurrentUser -Force

設定を変更せずにスクリプトを実行するには

以下の内容を書き込んだバッチファイルを作成して、バッチファイルにスクリプトの名前部分を渡して実行できます

@powershell -NoProfile -ExecutionPolicy Unrestricted "./%1.ps1"

PowerShell ウインドウでは、ps.bat スクリプト名
コマンドプロンプトでは ps スクリプト名

で実行できます

スタートメニューの PowerShell をコマンドプロンプトに変更して、エクスプローラの右クリックからもコマンドプロンプトを実行できるようにする

タスクバーを右クリックして、『タスクバーの設定』を選択



コマンドプロンプトを PowerShell に置き換えるを オフにする



PowerShell は、エクスプローラでフォルダを SHIFT キーを押しながら右クリックして表示されるメニューであるので問題ありません。

エクスプローラを右クリックしてコマンドプロンプトを開きたい場合は、以下のレジストリをインポートします(右端のダウンロードアイコンでダウンロード / 拡張子 .reg )
1.Windows Registry Editor Version 5.00
2.  
3.[HKEY_CLASSES_ROOT\Folder\shell\cmd]
4.@="コマンドプロンプト(&Q)"
5.  
6.[HKEY_CLASSES_ROOT\Folder\shell\cmd\command]
7.@="cmd.exe /s /k pushd \"%V\""

▼ 削除は以下です