Как программно завершить работу устройства Windows Mobile - PullRequest
3 голосов
/ 16 октября 2008

Я хотел бы программно завершить работу устройства Windows Mobile, используя Compact Framework 2.0, Windows Mobile 5.0 SDK.

С уважением,

Ответы [ 7 ]

4 голосов
/ 16 октября 2008

Это, вероятно, не очень хорошая идея сделать это из вашего приложения - на устройстве есть кнопка питания по определенной причине, и закрытие приложения может вызвать замешательство и разочарование пользователя.

Если вы должны это сделать, и вы используете Windows Mobile 5.0 или более позднюю версию, вы можете P / Invoke ExitWindowsEx вот так:

[Flags]
public enum ExitFlags
{
  Reboot = 0x02,
  PowerOff = 0x08
}

[DllImport("coredll")]
public static extern int ExitWindowsEx(ExitFlags flags, int reserved);

...

ExitWindowsEx(ExitFlags.PowerOff, 0);
3 голосов
/ 13 ноября 2008

OpenNetCF.WindowsCE.PowerManagement класс имеет методы для приостановки и мягкого сброса. У него даже есть метод для аппаратного сброса!

1 голос
/ 21 октября 2009

Еще одна вещь, которую следует отметить с API ExitWindowsEx, заключается в том, что завершение работы поддерживается только на устройствах Windows Mobile Standard (например, смартфонах), а не на устройствах Windows Mobile Professional (Pocket PC).

См. Специальные примечания о флаге EWX_POWEROFF в документации ExitWindowsEx на MSDN. Я не пробовал API на Pocket PC в течение нескольких лет, но я уверен, что это все еще состояние игры.

Вместо этого вы можете исследовать использование API-интерфейсов управления питанием, чтобы перевести устройство в состояние пониженного энергопотребления, например в приостановленный или автоматический режим. Чего вы пытаетесь достичь, программно отключая устройство?

0 голосов
/ 14 октября 2015

Я попробовал эти 2 кода, успешно выключил КПК

Process.Start("cmd", "/c shutdown.exe")
<br/>
Me.Close()
0 голосов
/ 29 апреля 2010

У меня есть другой способ перезагрузки и выключения (выключения) в API, но проблема не в том, что.

закрытое перечисление SetSystemPowerStateAction
{
POWER_STATE_ON = 0x00010000,
POWER_STATE_OFF = 0x00020000,
POWER_STATE_SUSPEND = 0x00200000,
POWER_FORCE = 4096,
POWER_STATE_RESET = 0x00800000
}

[DllImport ("coredll.dll", SetLastError = true)]
static extern int SetSystemPowerState (строка psState, int StateFlags, int Options);

// выключить
// хотя я не уверен, почему он перезагружается ??
SetSystemPowerState (null, (int) SetSystemPowerStateAction.POWER_STATE_OFF, (int) SetSystemPowerStateAction.POWER_FORCE);

// перезапустить
SetSystemPowerState (null, (int) SetSystemPowerStateAction.POWER_STATE_RESET, (int) SetSystemPowerStateAction.POWER_FORCE);

0 голосов
/ 16 октября 2008

Из того, что я прочитал (пару лет назад), Windows CE на самом деле не предназначена для выключения как такового, она просто переведена в состояние пониженного энергопотребления. Запомните это для мобильных / смартфонов, чтобы они всегда были включены.

Вам может пригодиться функция ExitWindowsEx, но:

  • Это встроенная функция, а не .Net / Compact Framework.
  • OEM-производитель должен реализовать необходимые функции, чтобы он был полезен.
  • Функция существует только в ОС Windows Mobile 5.0 или более поздней версии, но это не означает, что она существует на всех устройствах Windows CE.

Только с личной точки зрения на работе мы реализовали собственные средства выключения и перезапуска для ОС на базе Windows CE. Для этого нам пришлось написать много кода, поэтому я не ожидал, что эта функция отключения будет существовать во всех ОС.

0 голосов
/ 16 октября 2008

«Нормальный» Windows API имеет функцию ExitWindowsEx (). Вы можете проверить это. Однако представляется, что он зависит от OEM .

...