2012-06-04 3 views
1

Я пытаюсь выключить/перезагрузить свой Motorola MC9190 с EMDK 2.6, но я не могу понять, как этого добиться. Может кто-нибудь указать мне в правильном направлении, в каком пространстве имен я могу найти методы для этого или отправить пример? Helpfiles просто предлагают мне методы перезагрузки нескольких частей, таких как RF или WLAN:/Как отключить/перезагрузить мобильное устройство (Win CE 6.0) с помощью EMDK 2.6?

Заранее спасибо.

PS: Я не могу использовать внешние компоненты в качестве обходного пути!

+1

Я не нашел такой вариант в EMDK 2,5 - мы используем http://pinvoke.net/default.aspx/coredll .KernelIoControl to warmboot –

+0

Спасибо за информацию. К сожалению, внешние компоненты для меня не являются решением. – Streuner

+3

KernelIoControl не является внешним компонентом, это уже часть ОС. Вам просто нужно позвонить. – ctacke

ответ

1

Я обычно использую этот фрагмент кода, ниже вы увидите, как для CE и WM (с комментариями). Вам просто нужно вызвать ExitWindowsEx (2,0) для CE и SetSystemPowerState (NULL; POWER_STATE_RESET, 0) для Windows Mobile.

Следующий образец задерживает перезагрузку 48 часов.

// REBOOT.cpp: Определяет точку входа для консольного приложения. //

#include "stdafx.h" 
#include <windows.h> 
#include <commctrl.h> 
#include <Pm.h> 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    SYSTEMTIME tSysTime; 
    GetSystemTime(&tSysTime); 

    if (tSysTime.wYear!= 2005) 
    { 
     int delay = 1000 *60 * 60 * 48;// 48 Hrs 
     Sleep(delay); 

     //windows Mobile 
     //ExitWindowsEx(2,0); 

     //windows CE 
     return (int)SetSystemPowerState(NULL, POWER_STATE_RESET, 0); 

    } 

    return 0; 
} 
3

Это код, который я использую для мягкого сброса устройства Windows CE

[DllImport("coredll.dll")] 
    private static extern bool KernelIoControl(Int32 IoControlCode, IntPtr InputBuffer, Int32 InputBufferSize, byte[] OutputBuffer, Int32 OutputBufferSize, ref Int32 BytesReturned); 
    private const uint FILE_DEVICE_HAL = 0x00000101; 
    private const uint METHOD_BUFFERED = 0; 
    private 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); 
    } 

    public static void softReset() 
    { 
     byte[] OutputBuffer = new byte[256]; 
     Int32 OutputBufferSize, BytesReturned; 
     OutputBufferSize = OutputBuffer.Length; 
     BytesReturned = 0; 

     Int32 IOCTL_HAL_REBOOT = (Int32)CTL_CODE(FILE_DEVICE_HAL, 15, METHOD_BUFFERED, FILE_ANY_ACCESS); 

     KernelIoControl(IOCTL_HAL_REBOOT, IntPtr.Zero, 0, OutputBuffer, OutputBufferSize, ref BytesReturned); 
    } 
0

Используйте для этого кода для перезагрузки

static extern int SetSystemPowerState(string psState, int StateFlags, int Options); 
     const int POWER_FORCE = 4096; 
     const int POWER_STATE_RESET = 0x00800000; 


     private void SoftReset() 
     { 
      SetSystemPowerState(null, POWER_STATE_RESET, POWER_FORCE); 
     }