首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Windows Mobile 6中禁用睡眠模式

在Windows Mobile 6中禁用睡眠模式
EN

Stack Overflow用户
提问于 2008-10-29 10:59:49
回答 3查看 11.4K关注 0票数 7

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

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-10-29 22:32:52

如果你不想让你的程序在运行时处于睡眠状态,最好的方法是创建一个KeepAlive类型的函数,它调用SystemIdleTimerReset、SHIdleTimerReset并模拟按键触摸。然后你需要调用它很多,基本上到处都是。

代码语言:javascript
复制
#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;
    }
}

只有当用户手动启动应用程序时,此方法才有效。

如果您的应用程序是通过通知启动的(即,当设备处于挂起状态时),那么您需要做更多的工作,否则您的应用程序将在很短的一段时间后被挂起,直到用户将设备从挂起模式启动。要处理此问题,您需要将设备设置为无人值守电源模式。

代码语言:javascript
复制
if(!::PowerPolicyNotify (PPN_UNATTENDEDMODE, TRUE))
{
    // handle error
}

// do long running process

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

在无人参与模式使用期间,您仍然需要大量调用KeepAlive,您可以使用一个单独的线程,该线程休眠x毫秒并调用keep alive函数。

请注意,无人值守模式不会使设备脱离睡眠模式,它会使设备处于奇怪的半唤醒状态。

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

票数 8
EN

Stack Overflow用户

发布于 2008-10-29 13:31:31

在名为“PowerManager/ReloadActivityTimeout”的命名系统事件上,修改影响所需特定睡眠条件(超时、电池、交流电源等)的the Power Manager registry setting和SetEvent,以告知操作系统重新加载设置。

票数 6
EN

Stack Overflow用户

发布于 2008-10-29 11:06:50

可能是通过将“系统电源状态”修改为described here (但在c#中)

该文章还描述了一种通过定期调用本机函数SystemIdleTimerReset()来防止移动设备休眠(这并不完全是您想要的)的方法(以防止设备断电)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/246407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档