modo de suspensão Desativar no Windows Mobile 6
-
05-07-2019 - |
Pergunta
Alguém sabe como eu poderia programaticamente ativar / desativar o modo de suspensão no Windows Mobile?
Obrigado!
Solução
Se você quer que seu programa não pode ser posto para dormir enquanto ele está funcionando, a melhor maneira é criar uma função tipo KeepAlive que chama SystemIdleTimerReset, SHIdleTimerReset e simula um toque de tecla. Então você precisa chamá-lo muito, basicamente em todos os lugares.
#include <windows.h>
#include <commctrl.h>
extern "C"
{
void WINAPI SHIdleTimerReset();
};
void KeepAlive()
{
static DWORD LastCallTime = 0;
DWORD TickCount = GetTickCount();
if ((TickCount - LastCallTime) > 1000 || TickCount < LastCallTime) // watch for wraparound
{
SystemIdleTimerReset();
SHIdleTimerReset();
keybd_event(VK_LBUTTON, 0, KEYEVENTF_SILENT, 0);
keybd_event(VK_LBUTTON, 0, KEYEVENTF_KEYUP | KEYEVENTF_SILENT, 0);
LastCallTime = TickCount;
}
}
Este método só funciona quando o usuário inicia o aplicativo manualmente.
Se o seu aplicativo é iniciado por uma notificação (ou seja, enquanto o dispositivo está suspenso), então você precisa de fazer mais ou então a sua aplicação será suspenso após um período muito curto de tempo até que os poderes do usuário do dispositivo para fora do modo de suspensão . Para lidar com isso, você precisa colocar o dispositivo no modo de energia autônoma.
if(!::PowerPolicyNotify (PPN_UNATTENDEDMODE, TRUE))
{
// handle error
}
// do long running process
if(!::PowerPolicyNotify (PPN_UNATTENDEDMODE, FALSE))
{
// handle error
}
Durante o uso modo automático, você ainda precisa chamar o KeepAlive muito, você pode usar um segmento separado que dorme por x milissegundos e chama a manter funcation vivo.
Por favor note que o modo autônomo não tirá-lo do modo de suspensão, ele coloca o dispositivo em um estado semi-acordado estranho.
Então, se você iniciar um modo automático quando o dispositivo em modo de suspensão, ele não irá ativar a tela ou qualquer coisa. Todos modo autônomo não é parada WM de suspender a sua aplicação. Além disso, o outro problema é que ele não funciona em todos os dispositivos, alguns gerenciamento de dispositivos de energia não é muito bom e vai suspendê-lo de qualquer maneira não importa o que você faz.
Outras dicas
Provavelmente, modificando o "States Power System", como descrito aqui ( mas em c #)
Esse artigo também descreve uma forma de impedir que o dispositivo móvel para dormir (que não é exatamente o que você pode querer), chamando a função nativa SystemIdleTimerReset () periodicamente (para impedir que o dispositivo desligar).