2012-07-09 125 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