我有一个系统需要应用程序始终运行。在窗口中禁用挂起CE
我已经将[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Power \ Timeouts]中的所有注册表设置设置为0(我被告知应该禁用超时)。
系统仍然处于暂停状态,我们在全功率管理模式下运行Windows CE 6.0 R3。
我有一个系统需要应用程序始终运行。在窗口中禁用挂起CE
我已经将[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Power \ Timeouts]中的所有注册表设置设置为0(我被告知应该禁用超时)。
系统仍然处于暂停状态,我们在全功率管理模式下运行Windows CE 6.0 R3。
像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);
对Control\Power\Timeouts
注册表项进行任何更改后,您需要启动特殊事件以便系统知道重新加载超时设置。这是一个名为事件调用PowerManager/ReloadActivityTimeouts
,所以你需要一个像
HANDLE hEvent = CreateEvent(NULL,
FALSE,
FALSE,
_T("PowerManager/ReloadActivityTimeouts"));
if(hEvent != NULL)
{
SetEvent(hEvent);
CloseHandle(hEvent);
}
一个片段(也就是逐字从我们的Win CE的应用程序,它建立并关闭超时根据用户的意愿。)
+1:谢谢你,我有一个C++解决方案,但没有一个C#解决方案,以填补我留在市场上的空白! – AAT 2012-01-19 00:03:13
@AAT:当谈到利润分享时,请记住关于我的内容;) – StaWho 2012-01-19 09:24:07