我有一個系統需要應用程序始終運行。在窗口中禁用掛起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