Я пытаюсь определить, подключен ли мой телевизор к ноутбуку с помощью кабеля HDMI. Я использую функцию WinAPI RegisterDeviceNotification()
обрабатывать сообщения устройства.
Когда я подключаю свой телевизор к ноутбуку (через кабель HDMI), я никогда не получаю сообщение WM_DEVICE_ARRIVAL, только 3 события WM_DEVICE_CHANGE. Это нормально?
Мне действительно нужно событие WM_DEVICE_ARRIVAL, потому что lParam (или wParam, я забыл) содержит структуру, которая сообщает мне тип подключенного устройства и имя устройства, тогда как, на самом деле, событие WM_DEVICE_CHANGE не содержит эту структуру.
Если это нормально, чтобы не получить сообщение WM_DEVICE_ARRIVAL после вставки порта HDMI, какой другой метод я мог бы использовать, чтобы определить имя и тип устройства при подключении?
Моя единственная идея: перечислить все устройства при запуске приложения, при подключении устройства отреагировать на событие WM_DEVICE_CHANGE и посмотреть, увеличился ли список устройств.
Вы могли бы опрос GetSystemMetrics(SM_CMONITORS)
или же EnumDisplayMonitors
,
WM_SETTINGCHANGE
сообщение (как правило) отправляется приложениями и службами, которые изменяют системные метрики, включая разрешение рабочего стола (которое изменяется при подключении HDMI при расширении рабочего стола, не отражается при зеркалировании). Вы можете использовать это для запуска вышеуказанного опроса, вместо того, чтобы полагаться исключительно на таймер.
Других решений пока нет …