質問は、GUID_LIDCLOSE_ACTIONではなくGUID_LIDSWITCH_STATE_CHANGEを参照します。
GUID_LIDCLOSE_ACTIONモニター蓋が閉じているとき、ユーザは、電力動作を変更した場合([コントロールパネル] - > [電源設定 - 開閉蓋が何を選択してください>)
あなたはオープン/クローズ蓋のイベントを監視する場合GUID_LIDSWITCH_STATE_CHANGEに登録する必要があります。
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);
...
}
とサービス制御ハンドラで:私はそれをWindowsサービスを使用
/**
* 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
私は年齢のため、このに見えたが、解決策を見つけたことはありません。 linuxでは読みやすいですが、ウィンドウ(xpまで)では、リッドスイッチは電源管理に結びついています。電源管理は、ユーザーの認証情報と結びついています。私はデバイスドライバを書く必要があったところに来て、そこで止まった。 – sje397
http://stackoverflow.com/questions/3355606/detect-laptop-lid-closure-and-opening – Samuel
@Samuel - excellent find。 – sje397