CH3COOH(酢酸)が.NET FrameworkやWindows Mobileの事を始め、日々情報を発信中!

デバイスの電源をオフにする

今回は、プログラムからデバイスの電源をオフにします。
電源をオフにするのには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);
    }

 


Copyright(C) since 2008 CH3COOH(酢酸). All Rights Reserved.