diff --git a/lib/graphics.js b/lib/graphics.js index e94e4d2..0c57515 100644 --- a/lib/graphics.js +++ b/lib/graphics.js @@ -544,9 +544,9 @@ function graphics(callback) { const workload = []; workload.push(util.wmic('path win32_VideoController get /value')); workload.push(util.wmic('path win32_desktopmonitor get /value')); - workload.push(util.powerShell('Get-CimInstance -Namespace root\\wmi -ClassName WmiMonitorBasicDisplayParams')); + workload.push(util.powerShell('Get-CimInstance -Namespace root\\wmi -ClassName WmiMonitorBasicDisplayParams | fl')); workload.push(util.powerShell('Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.Screen]::AllScreens')); - workload.push(util.powerShell('Get-CimInstance -Namespace root\\wmi -ClassName WmiMonitorConnectionParams')); + workload.push(util.powerShell('Get-CimInstance -Namespace root\\wmi -ClassName WmiMonitorConnectionParams | fl')); Promise.all( workload @@ -558,6 +558,8 @@ function graphics(callback) { // displays let dsections = data[1].split(/\n\s*\n/); // result.displays = parseLinesWindowsDisplays(dsections); + dsections.shift(); + dsections.pop(); // monitor (powershell) let msections = data[2].split('Active '); @@ -566,12 +568,12 @@ function graphics(callback) { // forms.screens (powershell) let ssections = data[3].split('BitsPerPixel '); ssections.shift(); - result.displays = parseLinesWindowsDisplaysPowershell(ssections, msections, dsections); // connection params (powershell) - video type let tsections = data[4].split(/\n\s*\n/); - // tsections.shift(); - console.log(tsections); + tsections.shift(); + + result.displays = parseLinesWindowsDisplaysPowershell(ssections, msections, dsections, tsections); if (result.controllers.length === 1 && result.displays.length === 1) { if (_resolutionx) { @@ -661,16 +663,16 @@ function graphics(callback) { // return displays; // } - function parseLinesWindowsDisplaysPowershell(ssections, msections, dsections) { + function parseLinesWindowsDisplaysPowershell(ssections, msections, dsections, tsections) { let displays = []; let vendor = ''; let model = ''; let deviceID = ''; if (dsections && dsections.length) { - let linesDsplay = dsections[0].split(os.EOL); - vendor = util.getValue(linesDsplay, 'MonitorManufacturer', '='); - model = util.getValue(linesDsplay, 'Name', '='); - deviceID = util.getValue(linesDsplay, 'PNPDeviceID', '='); + let linesDisplay = dsections[0].split(os.EOL); + vendor = util.getValue(linesDisplay, 'MonitorManufacturer', '='); + model = util.getValue(linesDisplay, 'Name', '='); + deviceID = util.getValue(linesDisplay, 'PNPDeviceID', '=').replace(/&/g, '&').toLowerCase(); } for (let i = 0; i < ssections.length; i++) { @@ -680,18 +682,20 @@ function graphics(callback) { let linesScreen = ssections[i].split(os.EOL); let linesMonitor = msections[i].split(os.EOL); + let linesConnection = tsections[i].split(os.EOL); const bitsPerPixel = util.getValue(linesScreen, 'BitsPerPixel'); const bounds = util.getValue(linesScreen, 'Bounds').replace('{', '').replace('}', '').split(','); const primary = util.getValue(linesScreen, 'Primary'); const sizex = util.getValue(linesMonitor, 'MaxHorizontalImageSize'); const sizey = util.getValue(linesMonitor, 'MaxVerticalImageSize'); - const instanceName = util.getValue(linesMonitor, 'InstanceName'); + const instanceName = util.getValue(linesMonitor, 'InstanceName').toLowerCase(); + const videoOutputTechnology = util.getValue(linesConnection, 'VideoOutputTechnology'); displays.push({ - vendor: instanceName === deviceID ? vendor : '', - model: instanceName === deviceID ? model : '', + vendor: instanceName.startsWith(deviceID) ? vendor : '', + model: instanceName.startsWith(deviceID) ? model : '', main: primary.toLowerCase() === 'true', builtin: false, - connection: '', + connection: videoOutputTechnology && videoTypes[videoOutputTechnology] ? videoTypes[videoOutputTechnology] : '', resolutionx: util.toInt(util.getValue(bounds, 'Width', '=')), resolutiony: util.toInt(util.getValue(bounds, 'Height', '=')), sizex: sizex ? parseInt(sizex, 10) : -1,