在电子中无法获取displayName

时间:2019-04-05 19:47:44

标签: 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_10DE&DEV_1B81&SUBSYS_33011462&REV_A1"
DeviceKey: "\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Video\\{48210CD6-1F3B-11E9-9541-D05099833422}\\0000"

因此,电子ID与EnumDisplayDevicesA可用的任何ID不匹配。将电子显示器与Win API显示器匹配的任何可行方法?

1 个答案:

答案 0 :(得分:0)

您已经指出,该ID来自display_info.cc。它在内部使用Chromium的屏幕(请参阅#include "ui/display/screen.h"。在进一步挖掘之后,我发现id来自this struct实现的第59行的方法。它只是从设备名称生成的哈希值来自操作系统,即MonitorInfoEXA结构。

也许您可以重复对名称进行哈希处理,然后将其与ID匹配。

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

其中设备名称为here中的szDevice。