2010-06-08 122 views
3

我有一個windows mobile 5程序(compact framework 3.5),我需要能夠檢測到設備空閒時的情況。檢查Windows Mobile設備是否空閒

現在我只是檢查背光是否關閉。就像這樣:

[DllImport("coredll.dll", EntryPoint = "sleep", SetLastError = true)] 
internal static extern void sleep(int dwMilliseconds); 

....

//Get the current power state of the system 
int winError = CoreDLL.GetSystemPowerState(systemStateName, out systemPowerStates); 
if (winError == 0) 
{ 
    //If the backlight is off, consider the state to be idle. 
    if (systemStateName.ToString() == "backlightoff") 
    { 
     idle = true; 
    } 
} 

我想,這可能會越來越接近,但我想知道,如果是真正不使用的設備。

回答

1

你使用正確的功能,只需檢查狀態(這是按位標誌):

if ((systemPowerStates & POWER_STATE_IDLE) == POWER_STATE_IDLE) { 
    idle = true; 
} 

POWER_STATE_IDLE = 0x00100000

編輯:回答您的評論,看看RequestPowerNotification函數。當電源狀態改變時,您將收到POWER_BROADCAST消息。

+0

這很好。 (它沒有解決我的問題,但它的工作。)我想我將不得不去POWER_STATE_USERIDLE(0x01000000)。但是,經過很長的空閒時間後,我得到0x02000000,這在pm.h中沒有定義。 – Vaccano 2010-06-08 17:40:47

+0

我仍然堅持這一點。我使用了您指定的方法,但POWER_STATE_IDLE從未設置。那是因爲我們使用定時器來檢查電源狀態是否空閒?這是否阻止它進入閒置狀態?如果是這樣,如果檢查導致它不閒置,你怎麼能做到這一點? (一旦你檢查你是否失去了閒置狀態。) – Vaccano 2010-06-14 20:57:49

+0

甜!謝謝。我會試試看。 – Vaccano 2010-06-14 21:50:42