Не удается получить DisplayName в Electron

#c #node.js #electron

#c #node.js #electron

Вопрос:

Я использую https://electronjs.org/docs/api/screen#screengetalldisplays метод получения информации о мониторах. Затем эта информация отправляется в приложение C , где оно пытается сопоставить монитор с помощью ID . Проблема в том, что Electron выдает, ID который я не могу сопоставить с результатом EnumDisplayDevicesA вызова метода.

 Electron Display ID:  2528732444

C   EnumDisplayDevicesA values:
DeviceID: "PCI\VEN_10DEamp;DEV_1B81amp;SUBSYS_33011462amp;REV_A1"
DeviceKey: "\Registry\Machine\System\CurrentControlSet\Control\Video\{48210CD6-1F3B-11E9-9541-D05099833422}\0000"
  

Таким образом, идентификатор Electron не соответствует ни одному идентификатору, доступному по EnumDisplayDevicesA . Есть ли какой-либо возможный способ сопоставить электронный дисплей с дисплеем Win API?

Ответ №1:

Идентификатор берется из объекта экрана electron, как вы уже указали. Который внутренне использует экран Chromium (см. #include "ui/display/screen.h" . После дальнейшего изучения я обнаружил, что идентификатор берется из метода в строке 59 реализацииdisplay_info.cc. Это просто хэш, сгенерированный из имени устройства, которое поступает из ОС, а именно из структуры MonitorInfoEXA.

Возможно, вы можете повторить хэш, который они делают для имени, и сопоставить его с идентификатором.

 static_cast<int64_t>(base::Hash(base::WideToUTF8(device_name))
  

где именем устройства является szDevice из этой структуры.