当前位置:  开发笔记 > 编程语言 > 正文

在Windows Mobile 6中禁用睡眠模式

如何解决《在WindowsMobile6中禁用睡眠模式》经验,为你挑选了2个好方法。

有谁知道如何在Windows Mobile上以编程方式禁用/启用睡眠模式?

谢谢!



1> Shane Powell..:

如果您希望程序在运行时不进入休眠状态,最好的方法是创建一个调用SystemIdleTimerReset,SHIdleTimerReset并模拟按键触摸的KeepAlive类型函数.然后你需要调用它,基本上到处都是.

#include 
#include 

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;
    }
}

此方法仅在用户手动启动应用程序时有效.

如果您的应用程序是通过通知启动的(即设备暂停时),那么您需要执行更多操作,否则您的应用程序将在很短的时间后暂停,直到用户将设备从暂停模式下电.要处理此问题,您需要将设备置于无人值守的电源模式.

if(!::PowerPolicyNotify (PPN_UNATTENDEDMODE, TRUE))
{
    // handle error
}

// do long running process

if(!::PowerPolicyNotify (PPN_UNATTENDEDMODE, FALSE))
{
    // handle error
}

在无人值守模式使用期间,您仍然需要调用KeepAlive,您可以使用一个单独的线程来休眠x毫秒并调用keep alive funcation.

请注意,无人值守模式不会使其退出睡眠模式,它会使设备处于奇怪的半清醒状态.

因此,如果您在设备处于挂起模式时启动无人值守模式,它将不会唤醒屏幕或任何其他内容.所有无人值守模式都会阻止WM暂停您的应用程序.另一个问题是它不适用于所有设备,某些设备电源管理不是很好,无论你做什么,它都会暂停你.



2> ctacke..:

修改影响所需特定睡眠条件的Power Manager注册表设置(超时,电池,交流电源等)和名为"PowerManager/ReloadActivityTimeouts"的命名系统事件上的SetEvent,以告知操作系统重新加载设置.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有