Skip to content

Instantly share code, notes, and snippets.

@jeffcrouse
Last active August 3, 2022 18:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jeffcrouse/593435cccdaeaf0320a32ce10632d196 to your computer and use it in GitHub Desktop.
Save jeffcrouse/593435cccdaeaf0320a32ce10632d196 to your computer and use it in GitHub Desktop.
const path = require('path');
const { exec } = require('child_process');
// https://www.nirsoft.net/utils/dump_edid.html
const exe = path.resolve(__dirname, "bin", "DumpEDID.exe");
const regex = /\*{65}([^\*]+)\*{65}/gm;
var _displays = [];
var _first = true;
function parse(info) {
var d = {};
d.active = /Active\s+:([^\n]+)/.exec(info)[1].trim()=="Yes";
d.serial = /Serial Number\s+:([^\n]+)/.exec(info)[1].trim();
d.name = /Monitor Name\s+:([^\n]+)/.exec(info)[1].trim();
d.key = /Registry Key\s+:([^\n]+)/.exec(info)[1].trim();
return d;
}
async function poll() {
return new Promise((resolve, reject) => {
exec(exe, function (error, stdout, stderr) {
if (error) {
return reject(error);
}
const results = stdout.matchAll(regex);
const displays = [];
for(var d of results) {
displays.push(parse(d[1]))
}
resolve(displays);
});
});
}
async function loop() {
if(_first) {
_displays = await poll();
console.log(`Monitoring ${_displays.length} registry keys`);
_first = false;
return;
}
const results = await poll();
for(const d of results) {
const found = _displays.find(ele => { return ele.key==d.key });
if(found==undefined) {
console.log(`New registry key found: ${d.name}`);
}
else if(found.active != d.active) {
console.log(`Active Changed: ${d.name} ${d.active}`);
}
}
_displays = results;
}
setInterval(loop, 1000);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment