我的系统要求应用程序始终运行。
我已将[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Power \ Timeouts]中的所有注册表设置都设置为0(我被告知应禁用超时)。
系统仍在暂停,我们在全功率管理模式下运行Windows CE 6.0 R3。
答案 0 :(得分:3)
与AAT的答案一样,你必须触发重载事件。下面的工作实施:
private static void DoAutoResetEvent()
{
string eventString = "PowerManager/ReloadActivityTimeouts";
IntPtr newHandle = CreateEvent(IntPtr.Zero, false, false, eventString);
EventModify(newHandle, (int)EventFlags.EVENT_SET);
CloseHandle(newHandle);
}
private enum EventFlags
{
EVENT_PULSE = 1,
EVENT_RESET = 2,
EVENT_SET = 3
}
[DllImport("coredll.dll", SetLastError = true)]
private static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName);
[DllImport("coredll")]
static extern bool EventModify(IntPtr hEvent, int func);
[DllImport("coredll.dll", SetLastError = true)]
private static extern bool CloseHandle(IntPtr hObject);
答案 1 :(得分:1)
对Control\Power\Timeouts
注册表项进行任何更改后,您需要执行特殊事件,以便系统知道重新加载超时设置。这是一个名为PowerManager/ReloadActivityTimeouts
的命名事件,因此您需要一个类似
HANDLE hEvent = CreateEvent(NULL,
FALSE,
FALSE,
_T("PowerManager/ReloadActivityTimeouts"));
if(hEvent != NULL)
{
SetEvent(hEvent);
CloseHandle(hEvent);
}
(这是我们的Win CE应用程序的逐字记录,根据用户的意愿设置和关闭超时。)
答案 2 :(得分:0)
另一种同样有效的方法,但可能被视为黑客攻击是定期输出假按键。可以使用此功能:
keybd_event(VKEY_F24,0,KEYEVENTF_KEYUP,0);
如果输出不存在的密钥(如VKEY_F24)并使用密钥代码,则会使系统保持唤醒状态,并被正在运行的应用程序忽略。根据系统的默认超时,可能需要每30秒执行一次。