デバイスの電源をオフにする
今回は、プログラムからデバイスの電源をオフにします。
電源をオフにするのには2種類の方法があります。順にご紹介します。
電源OFFキーを押された事にして電源をオフにする
電源OFFキーを押下したという情報を、プログラムから伝えることによって電源をオフにします。
Win32APIであるkeybd_event関数P/Invokeにて呼び出し、VK_OFFのキーコードを送出します。
' 以下の名前空間を指定しておいてください
' 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
// 以下の名前空間を指定しておいてください
// 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が返って来ます。
' 以下の名前空間を指定しておいてください
' 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
// 以下の名前空間を指定しておいてください
// 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);
}