Wince 获取电源通知

11 篇文章 0 订阅
BOOL g_FlagExitThrd=FALSE;
HANDLE hNotifications;
HANDLE hReadMsgQ;
MSGQUEUEOPTIONS msgOptions = {0}; 
// Create a message queue for Power Manager notifications.
msgOptions.dwSize        = sizeof(MSGQUEUEOPTIONS);
msgOptions.dwFlags       = 0;
msgOptions.dwMaxMessages = QUEUE_ENTRIES;
msgOptions.cbMaxMessage  = sizeof(POWER_BROADCAST) + MAX_NAMELEN;
msgOptions.bReadAccess   = TRUE;


hReadMsgQ = CreateMsgQueue(NULL, &msgOptions);
if ( hReadMsgQ == NULL )
{
DEBUGMSG(ZONE_ERROR, (TEXT("PWM: CreateMsgQueue(Read): error %d\r\n"), GetLastError()));
g_FlagExitThrd = TRUE;
}


// Request Power notifications
hNotifications = RequestPowerNotifications(hReadMsgQ, POWER_NOTIFY_ALL);
if ( ! hNotifications ) 
{
DEBUGMSG(ZONE_ERROR, (TEXT("PWM: RequestPowerNotifications: error %d\r\n"), GetLastError()));
g_FlagExitThrd = TRUE;
}


while(!g_FlagExitThrd)
{
static HANDLE hMemio = INVALID_HANDLE_VALUE;
BOOL result=FALSE;
int   iBytesInQueue = 0;
DWORD dwFlags;
UCHAR buf[QUEUE_SIZE];
PPOWER_BROADCAST pB = (PPOWER_BROADCAST) buf;
memset(buf, 0, QUEUE_SIZE);




RETAILMSG(1, (TEXT("----2222222222222:ReadMsgQueue\r\n")));


// Read message from queue.
if (!ReadMsgQueue(hReadMsgQ, buf, QUEUE_SIZE, (LPDWORD)&iBytesInQueue, INFINITE, &dwFlags) )
{
RETAILMSG(1, (TEXT("PWM: ReadMsgQueue: ERROR:%d\r\n"), GetLastError()));

else if (iBytesInQueue < sizeof(POWER_BROADCAST) )
{
RETAILMSG(1, (TEXT("PWM: Received short message: %d bytes, expected: %d\r\n"),
iBytesInQueue, sizeof(POWER_BROADCAST)));
}
else 
{
switch ( pB->Message )
{
  case PBT_TRANSITION:
//RETAILMSG(1, (TEXT("000000000000000000 power state [Flags: 0x%x]: '%s'\r\n"),pB->Flags, pB->SystemPowerState));
switch ( POWER_STATE(pB->Flags) )
{
case POWER_STATE_ON:
break;
case POWER_STATE_OFF:
break;
case POWER_STATE_CRITICAL:
break;
case POWER_STATE_BOOT:
break;
case POWER_STATE_IDLE:
break;
case POWER_STATE_SUSPEND:
RETAILMSG(1, (TEXT("----111111:POWER_STATE_SUSPEND net_CloseConnection()\r\n")));
result = net_CloseConnection();
break;
case POWER_STATE_RESET:
break;
case POWER_STATE_PASSWORD:
break;
default:
break;
}
break;


case PBT_RESUME:
break;      
case PBT_POWERSTATUSCHANGE:
break;
case PBT_POWERINFOCHANGE: 
break;
default:
break;
}
}
}


if ( hNotifications )
{
StopPowerNotifications(hNotifications);
hNotifications = NULL;
}


if ( hReadMsgQ )
{
CloseMsgQueue(hReadMsgQ);
hReadMsgQ = NULL;
}
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值