I’ve been running into a variety of issues with multi monitor support in Vision Clients. I’m not happy with the state of multimonitor support in general in Ignition, but I’ve been able to get a quad monitor desktop to at least display a distinct main window and docked navigation window on each of the four desktops.
Right now, the biggest issue I can’t seem to work through is how to consistently determine which monitors are used if I’m not using all the monitors on a workstation for Ignition. We have three identical desktops with an identical quad monitor setup (same computer model, same monitors, same arrangement of monitors in windows (2x2 matrix with top left as 1, going counter clockwise to 4), same cabling of monitors.
I’ve setup a script to launch the client on 2 of the four monitors with a screen and navigation tab on each. When I launch the Vision client on the three nodes I get three different responses. On one machine, the two vision windows are the top two monitors. One the next they are the left two monitors, on the final machine they are the right two monitors. I want to launch the clients in fullscreen, with no max/min controls, so I don’t have any way at runtime to move them to different monitors.
How can I either explicitly set the monitors in the windows setup (or somewhere in the depths of Java), or how can I script the startup to only use the two monitors I want on startup? At this point, I would be at least semi happy with the systems acting the same, but my goal would be to be able to explicitly specify which monitor and which windows.
Our operators use Ignition and several other applications, so I don’t want to designate the entire quad setup as Ignition clients currently.
It’s not a great solution (there are no great solutions in this space; I think I worked with the support rep who was helping you), but one option would be to avoid trying to manage this in Ignition at all. You could pretty easily kick off an AutoHotkey script (via
system.util.execute in a startup script) that ‘forces’ your Vision windows in to the right location. As a bonus, AHK ties much more tightly into Windows than Java, so your monitor indices should align with Window’s.
@PGriffith Interesting concept. Any more tips to get started down that path? I’ve heard of AHK, but don’t have any personal experience with it.
We have a table with the node name, and a sub table for Monitor name, window name.
We query against the table in the startup script, if records exist then we launch instances to the monitor ID and open the listed window.
You can get the monitor ID with system.gui.getCurrentDesktop()
I just have a test window with a button and label on it.
The code in the button is
event.source.parent.getComponent('Label').text = str(system.gui.getCurrentDesktop())
The AutoHotkey forums probably have prior art you can crib off (Googling “autohotkey move window to monitor” seems fruitful) but it looks like you can use
SysGet to retrieve information:
WinMove to actually do something:
Thanks, I have been poking around their forums as well. I think I’ll start with something more manual like https://autohotkey.com/board/topic/63931-another-multi-monitor-window-mover/ with a goal towards automating it at startup down the line. Most of our stations are up 24x7, so if I can get the window moved to the right place I can at least get going with out too much operator angst.
Almost word for word on how we have our systems setup. We use a client dataset with the hostname and monitor number and then a fall through case for a default where the hostname isn’t found. Works like a champ.