Windows Mobileでは2種類の「リセット」があります。デバイスの再起動を行う為の「ソフトリセット」、工場出荷状態に戻すための「ハードリセット」です。
ハードリセットの方法に関しては、「Windows Mobile(.NET Compact Framework)でデバイスを工場出荷時状態に戻す(ハードリセットをおこなう) - 酢ろぐ!」にて紹介していますので必要であればご参照ください。
今回は、デバイスの再起動を行う「ソフトリセット」のご紹介です。
ExitWindowsEx関数を使ったソフトリセット
Win32APIであるExitWindowsEx関数を、P/Invokeにて呼び出す事によってデバイスの再起動(ソフトリセット)します。
VB.NET
' 以下の名前空間を指定しておいてください ' using 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.Reboot, 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.Reboot, 0); }
KernelIoControl関数を使ったソフトリセット
C#
[System.Runtime.InteropServices.DllImport("Coredll.dll")] extern static int KernelIoControl(int dwIoControlCode, IntPtr lpInBuf, int nInBufSize, IntPtr lpOutBuf, int nOutBufSize , ref int lpBytesReturned ); public void Reboot() { int IOCTL_HAL_REBOOT = 0x101003C; int bytesReturned = 0; KernelIoControl(IOCTL_HAL_REBOOT, IntPtr.Zero, 0, IntPtr.Zero, 0, ref bytesReturned ); }
関連記事
Windows Mobile(.NET Compact Framework)を使ってアプリ開発する際に逆引きとしてお使いください。