Отправить WM_POWERBROADCAST другому процессу

#windows #user32

#Windows #пользователь32

Вопрос:

У меня есть приложение Windows, которое отслеживает события управления питанием Windows

Как вручную отправлять такие события в процесс для целей тестирования, а не переводить ноутбук в спящий режим или в спящий режим? Есть ли способ отправить PBT_APMSUSPEND в процесс, например?

Ответ №1:

Вы можете отправить сообщение с соответствующими параметрами, используя SendMessage , используя дескриптор главного окна приложения получателя в качестве целевого.

У вас могут возникнуть проблемы с PBT_POWERSETTINGCHANGE , где lParam — указатель на структуру. (Windows обычно копирует такие структуры в другие процессы соответствующим образом, но поскольку это сообщение, которое вы не должны отправлять самостоятельно, оно может обрабатываться по-другому.)

В любом случае было бы разумнее протестировать реальный сценарий, например, на виртуальной машине. Хотя вы можете проверить реакцию своих приложений на конкретное сообщение, есть аспекты, которые это не охватывает

  • Для некоторых уведомлений необходимо зарегистрироваться ( RegisterPowerSettingNotification )
  • Порядок и время получения уведомлений
  • Отведенное время отклика
  • поведение ОС в зависимости от того, указывает ли ваш код возврата, что вы обработали сообщение или нет