2

我正在尝试使用 EMDK 2.6 关闭/重启我的摩托罗拉 MC9190,但我不知道如何实现这一点。有人可以为我指出正确的方向,我可以在哪个命名空间中找到此方法或发布示例?帮助文件只是为我提供了重启 RF 或 WLAN 等几个部分的方法:/

提前致谢。

PS:我不能使用外部组件作为解决方法!

4

3 回答 3

4

这是我用来软重置 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);
    }
于 2012-06-26T15:48:40.437 回答
2

使用此代码重新启动

[DllImport("coredll.dll")]
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);
        }  

(包括 System.Runtime.InteropServices)

于 2016-02-02T12:55:36.440 回答
1

我通常使用此代码段,您将在下面看到 CE 和 WM(已注释)。您只需为 CE 调用 ExitWindowsEx(2,0),为 Windows Mobile 调用 SetSystemPowerState(NULL; POWER_STATE_RESET, 0)。

以下示例将重新启动延迟 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;
}
于 2013-03-26T11:38:12.993 回答