2

Motorola MC9190 を EMDK 2.6 でシャットダウン/再起動しようとしていますが、これを行う方法がわかりません。このためのメソッドを見つけたり、例を投稿したりできる名前空間の正しい方向に誰かが私を向けることができますか? ヘルプファイルは、RF や WLAN などのいくつかの部分を再起動する方法を提供してくれます:/

前もって感謝します。

PS: 回避策として外部コンポーネントを使用することはできません!

4

3 に答える 3

4

これは、WindowsCEデバイスをソフトリセットするために使用するコードです

    [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 に答える