今回は、プログラムからデバイスの電源をオフにします。電源をオフにするのには2種類の方法があります。順にご紹介します。 ここでいう電源OFFは通常の携帯電話でいう所のサスペンド状態を指します。
電源OFFキーを押された事にして電源をオフにする
電源OFFキーを押下したという情報を、プログラムから伝えることによって電源をオフにします。Win32APIであるkeybd_event関数をP/Invokeにて呼び出し、VK_OFFのキーコードを送出します。
VB.NET
' 以下の名前空間を指定しておいてください ' Imports System.Runtime.InteropServices Private ReadOnly VK_OFF As Byte = &HDF Private ReadOnly KEYEVENTF_KEYUP As Byte = &H2 <DllImport("coredll.dll", SetLastError:=True)> _ Shared Sub keybd_event(ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Integer, _ ByVal dwExtraInfo As Integer) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) keybd_event(VK_OFF, 0, 0, 0) keybd_event(VK_OFF, 0, KEYEVENTF_KEYUP, 0) End Sub
C#
// 以下の名前空間を指定しておいてください // using System.Runtime.InteropServices; private readonly byte VK_OFF = 0xdf; private readonly byte KEYEVENTF_KEYUP = 0x2; [DllImport("coredll.dll", SetLastError = true)] public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); private void Button1_Click(System.Object sender, System.EventArgs e) { keybd_event(VK_OFF, 0, 0, 0); keybd_event(VK_OFF, 0, KEYEVENTF_KEYUP, 0); }
Win32APIのExitWindowsEx関数を使って電源をオフにする
Win32APIであるExitWindowsEx関数を、P/Invokeにて呼び出す事によって、システムをシャットダウンした後、電源を切ります。但し、システムにてパワーオフ機能をサポートしていなければなりません。 パワーオフ機能はStandard Editionのみのサポートとなっており、Classic/Professional Editionで実行すると、処理失敗の意味のfalseが返って来ます。
VB.NET
' 以下の名前空間を指定しておいてください ' Imports System.Runtime.InteropServices <Flags()> _ Enum ExitWindows As Integer Reboot = &H2 PowerOff = &H8 End Enum <DllImport("aygshell.dll", SetLastError:=True)> _ Shared Function ExitWindowsEx(ByVal uFlags As ExitWindows, _ ByVal dwReason As Integer) _ As <MarshalAs(UnmanagedType.Bool)> Boolean End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) ' デバイスを電源をオフする Dim isSuccess As Boolean = ExitWindowsEx(ExitWindows.PowerOff, 0) End Sub
C#
// 以下の名前空間を指定しておいてください // using System.Runtime.InteropServices; [Flags()] enum ExitWindows : int { Reboot = 0x2, PowerOff = 0x8 } [DllImport("aygshell.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool ExitWindowsEx(ExitWindows uFlags, int dwReason); private void Button1_Click(System.Object sender, System.EventArgs e) { // デバイスを電源をオフする bool isSuccess = ExitWindowsEx(ExitWindows.PowerOff, 0); }
関連記事
Windows Mobile(.NET Compact Framework)を使ってアプリ開発する際に逆引きとしてお使いください。