Вопрос относится к GUID_LIDSWITCH_STATE_CHANGE, а не к GUID_LIDCLOSE_ACTION.
GUID_LIDCLOSE_ACTION контролирует, изменяет ли пользователь режим питания при закрытии крышки (Панель управления -> Настройки питания -> Выберите, что делает закрывающая крышка)
Если вы хотите отслеживать событиекрышка закрыта / открыта, вам нужно зарегистрироваться на GUID_LIDSWITCH_STATE_CHANGE.Я использовал службу Windows:
int ServiceMain(int argc, char** argv)
{
serviceStatusHandle = RegisterServiceCtrlHandlerExA(serviceName, (LPHANDLER_FUNCTION_EX) ServiceControlHandler, 0);
...
lidcloseRegHandle = RegisterPowerSettingNotification(serviceStatusHandle, &GUID_LIDSWITCH_STATE_CHANGE, DEVICE_NOTIFY_SERVICE_HANDLE);
...
}
А в обработчике управления службами:
/**
* Event handler for windows service.
*/
void WINAPI ServiceControlHandler(DWORD controlCode, DWORD evtype, PVOID evdata, PVOID Context)
{
switch (controlCode)
{...
case SERVICE_CONTROL_POWEREVENT:
WriteToLog("Service Control: SERVICE_CONTROL_POWEREVENT builds and fwd the msg");
msg.control = SERVICE_CONTROL_POWEREVENT;
msg.event_type = (int) evtype;
msg.event_data = evdata;
...
}
}
evtype - это PBT_POWERSETTINGCHANGE, а в evdata вы регистрируете событие: 0 для закрытого и 1 для открытого.
Подробнее здесь: https://msdn.microsoft.com/en-us/library/aa372723.aspx https://msdn.microsoft.com/en-us/library/hh769082(v=vs.85).aspx