#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 из этой структуры.