Die Frage verweist auf GUID_LIDSWITCH_STATE_CHANGE nicht auf GUID_LIDCLOSE_ACTION.
GUID_LIDCLOSE_ACTION überwacht, ob der Benutzer das Leistungsverhalten ändert sich, wenn der Deckel (Systemsteuerung -> Energieeinstellungen -> Wählen Sie, was das Schließen des Deckels der Fall ist) schließt
Wenn Sie das Ereignis des Deckels Schließen/Öffnen überwachen möchten , müssen Sie sich für GUID_LIDSWITCH_STATE_CHANGE registrieren. Ich benutzte es, einen Windows-Dienst:
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);
...
}
Und in Dienststeuerungshandler:
/**
* 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 ist PBT_POWERSETTINGCHANGE und in evdata haben Sie das Ereignis protokolliert: 0 für geschlossene und 1 für eröffnet.
Weitere Details hier: https://msdn.microsoft.com/en-us/library/aa372723.aspx https://msdn.microsoft.com/en-us/library/hh769082(v=vs.85).aspx
Ich sah in die für Alter, fanden aber nie eine Lösung. Unter Linux ist es einfach zu lesen - aber auf Windows (bis zu xp) ist der Deckel-Schalter an die Energieverwaltung gebunden, die wiederum an Benutzer-Auth-Zeug gebunden ist. Ich kam an den Punkt, an dem ich einen Gerätetreiber schreiben musste - und blieb dort stehen. – sje397
http://stackoverflow.com/questions/3355606/detect-laptop-lid-closure-and-opening – Samuel
@ Samuel - ausgezeichnete finden. – sje397