2012-07-09 503 views
2

我註冊我的應用程序以在系統暫停或恢復時接收通知。 MSDN documentationPowerRegisterSuspendResumeNotification - 提供的回調函數不能按預期工作

功能我想要執行的應用程序接收通知後(I嘗試都空隙和空隙CALLBACK和兩個工作相同的方式):

void isConnectedStandby() 
{ 
    printf("ConnectedStandby Request"); 
} 

第一殼體 - I到isConnectedStandby功能提供指針,但是系統把它當作一個指向函數的雙指針 - 它調用這個回調指針下的地址。

HPOWERNOTIFY RegistrationHandle; 

PowerRegisterSuspendResumeNotification(
     DEVICE_NOTIFY_CALLBACK, 
     &isConnectedStandby, 
     &RegistrationHandle 
); 

第二種情況 - 在這裏我提供如下(此方法是執行我的功能代碼):

typedef void (*StatusFunction_t)(); 
StatusFunction_t StatusFunction = isConnectedStandby; 
HPOWERNOTIFY RegistrationHandle; 

    PowerRegisterSuspendResumeNotification(
     DEVICE_NOTIFY_CALLBACK, 
     &isConnectedStandby, 
     &RegistrationHandle 
); 

系統不是隻調用我的功能,但第一個畢竟地址(如果我提供一組函數,當沒有有效的代碼時,它會一個接一個地執行崩潰)

什麼是使用此函數的正確方法?

回答

0

函數聲明(必須是靜態ULONG有3個參數,你可以看到如下圖):

static ULONG isConnectedStandby(PVOID Context, ULONG Type, PVOID Setting); 

ULONG isConnectedStandby(PVOID Context, ULONG Type, PVOID Setting) 
{ 
    printf("ConnectedStandby Request"); 
    return 0; 
} 

直接提供的回調函數來PowerRegisterSuspendResumeNotification的Istead我們必須提供充斥着我們的功能結構_DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS地址:

static _DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS testCallback = { 
    isConnectedStandby, 
    nullptr 
    }; 
HPOWERNOTIFY RegistrationHandle; 

PowerRegisterSuspendResumeNotification(
    DEVICE_NOTIFY_CALLBACK, 
    &testCallback, 
    &RegistrationHandle 
); 

MSDN文檔沒有提及任何這些信息。

+0

輸入連接待機時不會調用回調。它只適用於休眠和正常待機。 – 2014-02-14 23:45:14

相關問題