Я пишу приложение на C# (специально для ноутбуков) и хочу знать о состоянии крышки, т. е. когда она открыта, а когда закрыта.
Я уже использовал pInvoke вместе с функцией Microsoft RegisterPowerSettingNotification с помощью этого SO-ответа.
Итак, с учетом вышеизложенного я знаю, когда крышка закрывается или открывается, и знаю ее состояние,
НО я хочу получить состояние крышки, прежде чем что-либо еще продолжится.
Я заметил, что даже если крышка не изменяется, вызывается функция обратного вызова, и я могу проверить ее параметр, чтобы узнать состояние крышки, но для меня это нехорошо, поскольку это событие, и я не могу просто ждать, пока оно произойдет (может быть, есть другой способ обойти это?).
Я также пробовал функцию PowerEnumerate, но не смог ничего от нее получить (возможно, есть что-то, чего я не знаю, что могло бы помочь)
РЕДАКТИРОВАТЬ 1:
Я не могу ждать или задерживать приложение, и есть две проблемы, которые требуют от меня получения состояния без CB. Во-первых, крышка может быть закрыта, когда ноутбук подключен к монитору, что позволяет пользователю использовать ноутбук. Если пользователь запускает приложение в этой ситуации, оно не должно запускаться.
Вторая причина заключается в том, что я хочу, чтобы приложение было удобным для пользователя и уведомляло о том, что происходит, когда оно запускается или останавливается, и если я получу cb в неподходящее время, оно может быть проигнорировано из-за внутренней логики приложения, и тогда мне придется ждать, пока я в следующий раз получу cb, я бы вообще это сделал.
Итак (без каламбура)
Есть ли способ получить эту информацию сразу?
РЕДАКТИРОВАТЬ 2:
Из комментариев кажется, что неясно, что мне нужно. Мне нужен способ узнать состояние крышки. то есть - вызвать какой-то API или что-то еще, и что возвращаемое значение - это состояние.
спасибо!
Ключевые слова: GUID_LIDSWITCH_STATE_CHANGE , WM_POWERBROADCAST, Настройка электропитания