been working for a few days on a set of nodes that retrieves all sorts of interesting information about connected monitors. after fighting for a few days with some PInvoke madness, I stumbled upon MonitorDetailsReader, a nuget that already does all this magic with the help of the EDIDParser lib.
with the information provided by those libs, I managed to create a few util nodes :
GetMonitorDetails: outputs a
Spread<Monitor>, containing some detailed information about each of your connected monitors
OnMonitorSetupChanged: outputs an
Observable<Spread<Monitor>>when a device is added/removed from the computer. In practice, this one fires on each device add/remove (even your mouse) since I could not find a way to filter monitor only hardware change events
MonitorHelper: spawns a fullscreen Renderer on each of your monitors with some useful information about them. Press ESC to destroy the Renderers
AssignToSerialNumber: a small node that allows to place a Renderer on a specific monitor based on its serial number. For now, it does not make it fullscreen since I encountered some issues when doing that, but that’s the next thing to dig
the functionalities are there, but this has absolutely not been tested extensively : for now, I only have my laptop with a single screen plugged in.
what I’d like to dig next :
- hide a renderer if the monitor it’s assigned to goes missing
- … and bring it back if the monitor shows up again
- make sure the other renderers don’t go all over the place when the screen setup changes
- find a way to get an event only when a monitor is plugged/unplugged (and not any device as it is now)
and some questions :
- i’d like to get some feedback on how the Renderer creation/disposal is handled in the
MonitorHelpernode. this seems to be working but I’m not sure about the disposing part
AssignToSerialNumberfor now only places a windowed renderer on the screen. if you also set BorderStyle to None and Maximize the form, the windows sticks to the monitor and cannot be moved again. any leads on that?
the idea behind this lib would be to ease the development of installations with distinct content on multiple monitors without relying on Windows’ nonsensical device names
here’s a screenshot of the debug screen :
one last thing : in previous versions of these nodes, I experienced some vvvv crashes when playing with the SkiaRenderer nodes and disconnecting my second monitor. please make sure you don’t have any sensitive document open before testing that out (tho those crashes seem to be gone now)
wanna test? head over to the repo or install using
nuget install VL.SuperMonitor -pre
and look for the help patches in the help browser
merci beaucoup in advance for your feedbackkkk!