LRESULT CSuspendDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
int sleepTime;
CString stime;
sleepTime = m_time;
switch(message)
{
case WM_POWERBROADCAST:
{
switch(wParam)
{
case PBT_APMSUSPEND:
{
::OutputDebugString("准备。。。");
stime.Format("%s",sleepTime);
if (sleepTime == 0)
{
sleepTime = 15;
}
OutputDebugString ( stime );
hTimer=::CreateWaitableTimer(NULL,TRUE,"lachor");
if(!hTimer) break;
hTimer=OpenWaitableTimer(TIMER_ALL_ACCESS,TRUE,"lachor");
LARGE_INTEGER liDueTime;
liDueTime.QuadPart= sleepTime * 100 * 100 * (-10);
SetWaitableTimer(hTimer,&liDueTime,0,NULL,NULL,TRUE);
break;
}
case PBT_APMRESUMESUSPEND:
{
if(hTimer)
{
CancelWaitableTimer(hTimer);
CloseHandle(hTimer);
}
::OutputDebugString("OK...");
break;
}
}
}
}
return CDialog::WindowProc(message, wParam, lParam);
}
这样就可以实现,但在Win7或者Vista下离唤醒操作还需要一段时间;
所以还得研究下...希望高手出现;