Программная перезагрузка Мобильного устройства в NET CF.

Существует 2 вида перезагрузки для карманных компьютеров Жёсткая (Hard Reset — аппаратная перезагрузка) и Мягкая (Soft Reset — программная перезагрузка).
При Жёсткой перезагрузке устройство возвращается к заводским настройкам, делается она специфическими методами (иногда это нажатие сочетания определённых клавиш, иногда специально спрятанная кнопка). В любом случае прибегать к такому методу перезагрузке следует крайне осторожно.
При Мягкой перезагрузке все настройки и программное обеспечение на устройстве сохраняются, происходит обычная перезагрузка устройства, как на обычном компьютере. Этот вид перезагрузки используется довольно часто, когда необходимо применить новые специфические параметры либо при сбое какого либо из приложений. Здесь я приведу примеры мягкой перезагрузки устройства.

Пример №1 должен подходит для всех устройств (я проверял на Windows Mobile 6.5):
С использованием функции KernelIoControl из библиотеки Coredll.dll.

public const uint FILE_DEVICE_HAL = 0x00000101;
public const uint METHOD_BUFFERED = 0;
public const uint FILE_ANY_ACCESS = 0;

private static uint CTL_CODE(uint DeviceType, uint Function, uint Method, uint Access)
        {
            return ((DeviceType << 16) | (Access << 14) | (Function << 2) | Method);
        }
       
[DllImport("Coredll.dll")]
public extern static uint KernelIoControl
        (
            uint dwIoControlCode,
            IntPtr lpInBuf,
            uint nInBufSize,
            IntPtr lpOutBuf,
            uint nOutBufSize,
            ref uint lpBytesReturned
            );

public static void resetPocket()
{
uint bytesReturned = 0;
uint IOCTL_HAL_REBOOT = CTL_CODE(FILE_DEVICE_HAL, 15, METHOD_BUFFERED, FILE_ANY_ACCESS);
KernelIoControl(IOCTL_HAL_REBOOT, IntPtr.Zero, 0, IntPtr.Zero, 0, ref bytesReturned);
}

//Теперь для перезагрузки устройства вызываем:
resetPocket();


Пример №2 должен работать только на Windows Mobile 5.0 и выше (я проверял на Windows Mobile 6.5):
С использованием функции ExitWindowsEx из библиотеки aygshell.dll.
[DllImport("aygshell.dll")]
public static extern System.Boolean ExitWindowsEx
        (int uFlag, int dwReserved);

const int EWX_REBOOT = 2; // 2 - означает перезагрузку.

private void RebootMobile()
        {
            ExitWindowsEx(EWX_REBOOT, 0);
        }

//Теперь для запуска перезагрузки выполняем:
RebootMobile();


EWX_REBOOT — может также принимать значения:
//Одно из этих пяти:
   LogOff = 0x00,
   ShutDown = 0x01,
   Reboot = 0x02,
   PowerOff = 0x08,
   RestartApps = 0x40


Здесь можно скачать исходные коды примеров: ExampleForPerezagruzka.rar

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.