meshcentral
Version:
Web based remote computer management server
1 lines • 13.1 kB
JavaScript
var red=255,yellow=65535,GXxor=6,GXclear=0,ExposureMask=32768;function windows_monitorborder(){this._ObjectID="monitor-info";var s=require("monitor-info"),d=require("_GenericMarshal"),n=d.CreateNativeProxy("user32.dll"),i=(s.monitors=[],n.CreateMethod("GetDC"),n.CreateMethod("ReleaseDC"),n.CreateMethod("FillRect"),n.CreateMethod("InvalidateRect"),d.CreateNativeProxy("gdi32.dll")),e=(i.CreateMethod("CreateSolidBrush"),i.CreateSolidBrush(red)),a=i.CreateSolidBrush(yellow);require("events").EventEmitter.call(this),this.on("~",function(){this.Stop()}),this.Stop=function(){s.redInterval=null;var i,t=d.CreateVariable(16),o=t.toBuffer();for(i in s.monitors)o.writeInt32LE(s.monitors[i].left,0),o.writeInt32LE(s.monitors[i].top,4),o.writeInt32LE(s.monitors[i].left+(s.monitors[i].right-s.monitors[i].left),8),o.writeInt32LE(s.monitors[i].bottom-s.monitors[i].top,12),n.InvalidateRect(0,t,0)},this.Start=function(){s.getInfo().then(function(i){var o=d.CreateVariable(16);s.monitors=i,s.dc=n.GetDC(0),s.state=0,s.redInterval=setInterval(function(){s.state=(s.state+1)%8;var i,t=o.toBuffer();for(i in s.monitors)t.writeInt32LE(s.monitors[i].left,0),t.writeInt32LE(s.monitors[i].top,4),t.writeInt32LE(s.monitors[i].left+(s.monitors[i].right-s.monitors[i].left)/2,8),t.writeInt32LE(5,12),n.FillRect(s.dc,o,0==s.state||4==s.state?a:e),t.writeInt32LE(s.monitors[i].left+(s.monitors[i].right-s.monitors[i].left)/2,0),t.writeInt32LE(s.monitors[i].top,4),t.writeInt32LE(s.monitors[i].right,8),t.writeInt32LE(5,12),n.FillRect(s.dc,o,1==s.state||5==s.state?a:e),t.writeInt32LE(s.monitors[i].right-5,0),t.writeInt32LE(s.monitors[i].top,4),t.writeInt32LE(s.monitors[i].right,8),t.writeInt32LE(s.monitors[i].top+(s.monitors[i].bottom-s.monitors[i].top)/2,12),n.FillRect(s.dc,o,2==s.state||6==s.state?a:e),t.writeInt32LE(s.monitors[i].right-5,0),t.writeInt32LE(s.monitors[i].top+(s.monitors[i].bottom-s.monitors[i].top)/2,4),t.writeInt32LE(s.monitors[i].right,8),t.writeInt32LE(s.monitors[i].bottom,12),n.FillRect(s.dc,o,3==s.state||7==s.state?a:e),t.writeInt32LE(s.monitors[i].left+(s.monitors[i].right-s.monitors[i].left)/2,0),t.writeInt32LE(s.monitors[i].bottom-5,4),t.writeInt32LE(s.monitors[i].right,8),t.writeInt32LE(s.monitors[i].bottom,12),n.FillRect(s.dc,o,4==s.state||0==s.state?a:e),t.writeInt32LE(s.monitors[i].left,0),t.writeInt32LE(s.monitors[i].bottom-5,4),t.writeInt32LE(s.monitors[i].left+(s.monitors[i].right-s.monitors[i].left)/2,8),t.writeInt32LE(s.monitors[i].bottom,12),n.FillRect(s.dc,o,5==s.state||1==s.state?a:e),t.writeInt32LE(s.monitors[i].left,0),t.writeInt32LE(s.monitors[i].top+(s.monitors[i].bottom-s.monitors[i].top)/2,4),t.writeInt32LE(s.monitors[i].left+5,8),t.writeInt32LE(s.monitors[i].bottom,12),n.FillRect(s.dc,o,6==s.state||2==s.state?a:e),t.writeInt32LE(s.monitors[i].left,0),t.writeInt32LE(s.monitors[i].top,4),t.writeInt32LE(s.monitors[i].left+5,8),t.writeInt32LE(s.monitors[i].top+(s.monitors[i].bottom-s.monitors[i].top)/2,12),n.FillRect(s.dc,o,7==s.state||3==s.state?a:e)},450)})}}function linux_monitorborder(){var s=this;this.displays=[],this._ObjectID="monitor-info",this._info=require("monitor-info"),this._isUnity=this._info.isUnity(),console.log("isUnity = "+this._isUnity),require("events").EventEmitter.call(this),this.on("~",function(){this.Stop()}),this.Stop=function(){if(this._timeout=null,!this._isUnity)for(var i=0;i<this.displays.length;++i)this.displays[i].GC1&&this.displays[i].rootWindow&&(s._info._X11.XSetFunction(s.displays[i].display,s.displays[i].GC1,GXclear),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].rootWindow,s.displays[i].GC1,0,0,s.displays[i].right,0),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].rootWindow,s.displays[i].GC1,s.displays[i].right,0,s.displays[i].right,s.displays[i].bottom),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].rootWindow,s.displays[i].GC1,0,s.displays[i].bottom,s.displays[i].right,s.displays[i].bottom),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].rootWindow,s.displays[i].GC1,0,0,0,s.displays[i].bottom),this._info._X11.XFlush(this.displays[i].display))},this.Start=function(){this._info.getInfo().then(function(i){s.displays=i,console.log(i.length+" displays");for(var t,o=0;o<i.length;++o)console.log("Width: "+i[o].right+", Height: "+i[o].bottom),i[o].rootWindow=s._info._X11.XRootWindow(i[o].display,i[o].screenId),s._isUnity?(t=s._info._X11.XWhitePixel(i[o].display,i[o].screenId).Val,i[o].window_top=s._info._X11.XCreateSimpleWindow(i[o].display,i[o].rootWindow,0,0,i[o].right,5,0,t,t),i[o].window_top.gc=s._info._X11.XCreateGC(i[o].display,i[o].window_top,0,0),s._info._X11.XSetLineAttributes(i[o].display,i[o].window_top.gc,10,0,1,1),s._info._X11.XSetSubwindowMode(i[o].display,i[o].window_top.gc,1),s._info.unDecorateWindow(i[o].display,i[o].window_top),s._info.setWindowSizeHints(i[o].display,i[o].window_top,0,0,i[o].right,5),i[o].window_right=s._info._X11.XCreateSimpleWindow(i[o].display,i[o].rootWindow,i[o].right-5,0,5,i[o].bottom,0,t,t),i[o].window_right.gc=s._info._X11.XCreateGC(i[o].display,i[o].window_right,0,0),s._info._X11.XSetLineAttributes(i[o].display,i[o].window_right.gc,10,0,1,1),s._info._X11.XSetSubwindowMode(i[o].display,i[o].window_right.gc,1),s._info.unDecorateWindow(i[o].display,i[o].window_right),s._info.setWindowSizeHints(i[o].display,i[o].window_right,i[o].right-5,0,5,i[o].bottom),i[o].window_left=s._info._X11.XCreateSimpleWindow(i[o].display,i[o].rootWindow,0,0,5,i[o].bottom,0,t,t),i[o].window_left.gc=s._info._X11.XCreateGC(i[o].display,i[o].window_left,0,0),s._info._X11.XSetLineAttributes(i[o].display,i[o].window_left.gc,10,0,1,1),s._info._X11.XSetSubwindowMode(i[o].display,i[o].window_left.gc,1),s._info.unDecorateWindow(i[o].display,i[o].window_left),s._info.setWindowSizeHints(i[o].display,i[o].window_left,0,0,5,i[o].bottom),i[o].window_bottom=s._info._X11.XCreateSimpleWindow(i[o].display,i[o].rootWindow,0,i[o].bottom-5,i[o].right,5,0,t,t),i[o].window_bottom.gc=s._info._X11.XCreateGC(i[o].display,i[o].window_bottom,0,0),s._info._X11.XSetLineAttributes(i[o].display,i[o].window_bottom.gc,10,0,1,1),s._info._X11.XSetSubwindowMode(i[o].display,i[o].window_bottom.gc,1),s._info.unDecorateWindow(i[o].display,i[o].window_bottom),s._info.setWindowSizeHints(i[o].display,i[o].window_bottom,0,i[o].bottom-5,i[o].right,5),s._info._X11.XMapWindow(i[o].display,i[o].window_top),s._info._X11.XMapWindow(i[o].display,i[o].window_right),s._info._X11.XMapWindow(i[o].display,i[o].window_left),s._info._X11.XMapWindow(i[o].display,i[o].window_bottom),s._info.setAlwaysOnTop(i[o].display,i[o].rootWindow,i[o].window_top),s._info.hideWindowIcon(i[o].display,i[o].rootWindow,i[o].window_top),s._info.setAlwaysOnTop(i[o].display,i[o].rootWindow,i[o].window_right),s._info.hideWindowIcon(i[o].display,i[o].rootWindow,i[o].window_right),s._info.setAlwaysOnTop(i[o].display,i[o].rootWindow,i[o].window_left),s._info.hideWindowIcon(i[o].display,i[o].rootWindow,i[o].window_left),s._info.setAlwaysOnTop(i[o].display,i[o].rootWindow,i[o].window_bottom),s._info.hideWindowIcon(i[o].display,i[o].rootWindow,i[o].window_bottom),s._info._X11.XFlush(i[o].display),i[o].borderState=0):(i[o].GC1=s._info._X11.XCreateGC(i[o].display,i[o].rootWindow,0,0),i[o].borderState=0,s._info._X11.XSetForeground(i[o].display,i[o].GC1,s._info._X11.XWhitePixel(i[o].display,i[o].screenId).Val),s._info._X11.XSetLineAttributes(i[o].display,i[o].GC1,10,0,1,1),s._info._X11.XSetSubwindowMode(i[o].display,i[o].GC1,1));s._info._XEvent=s._info._gm.CreateVariable(192),s._timeout=setTimeout(s._isUnity?s.unity_drawBorder:s.timeoutHandler,250)})},this.timeoutHandler=function(){for(var i=0;i<s.displays.length;++i)s.displays[i].borderState=(s.displays[i].borderState+1)%8,s._info._X11.XSetForeground(s.displays[i].display,s.displays[i].GC1,0==s.displays[i].borderState||4==s.displays[i].borderState?16776960:16711680),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].rootWindow,s.displays[i].GC1,0,0,s.displays[i].right/2,0),s._info._X11.XSetForeground(s.displays[i].display,s.displays[i].GC1,1==s.displays[i].borderState||5==s.displays[i].borderState?16776960:16711680),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].rootWindow,s.displays[i].GC1,s.displays[i].right/2,0,s.displays[i].right,0),s._info._X11.XSetForeground(s.displays[i].display,s.displays[i].GC1,2==s.displays[i].borderState||6==s.displays[i].borderState?16776960:16711680),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].rootWindow,s.displays[i].GC1,s.displays[i].right,0,s.displays[i].right,s.displays[i].bottom/2),s._info._X11.XSetForeground(s.displays[i].display,s.displays[i].GC1,3==s.displays[i].borderState||7==s.displays[i].borderState?16776960:16711680),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].rootWindow,s.displays[i].GC1,s.displays[i].right,s.displays[i].bottom/2,s.displays[i].right,s.displays[i].bottom),s._info._X11.XSetForeground(s.displays[i].display,s.displays[i].GC1,5==s.displays[i].borderState||1==s.displays[i].borderState?16776960:16711680),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].rootWindow,s.displays[i].GC1,0,s.displays[i].bottom,s.displays[i].right/2,s.displays[i].bottom),s._info._X11.XSetForeground(s.displays[i].display,s.displays[i].GC1,4==s.displays[i].borderState||0==s.displays[i].borderState?16776960:16711680),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].rootWindow,s.displays[i].GC1,s.displays[i].right/2,s.displays[i].bottom,s.displays[i].right,s.displays[i].bottom),s._info._X11.XSetForeground(s.displays[i].display,s.displays[i].GC1,7==s.displays[i].borderState||3==s.displays[i].borderState?16776960:16711680),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].rootWindow,s.displays[i].GC1,0,0,0,s.displays[i].bottom/2),s._info._X11.XSetForeground(s.displays[i].display,s.displays[i].GC1,6==s.displays[i].borderState||2==s.displays[i].borderState?16776960:16711680),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].rootWindow,s.displays[i].GC1,0,s.displays[i].bottom/2,0,s.displays[i].bottom),s._info._X11.XFlush(s.displays[i].display);s._timeout=setTimeout(s._isUnity?s.unity_drawBorder:s.timeoutHandler,400)},this.unity_drawBorder=function(){for(var i=0;i<s.displays.length;++i)s.displays[i].borderState=(s.displays[i].borderState+1)%8,s._info._X11.XSetForeground(s.displays[i].display,s.displays[i].window_top.gc,0==s.displays[i].borderState||4==s.displays[i].borderState?16776960:16711680),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].window_top,s.displays[i].window_top.gc,0,0,s.displays[i].right/2,0),s._info._X11.XSetForeground(s.displays[i].display,s.displays[i].window_top.gc,1==s.displays[i].borderState||5==s.displays[i].borderState?16776960:16711680),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].window_top,s.displays[i].window_top.gc,s.displays[i].right/2,0,s.displays[i].right,0),s._info._X11.XFlush(s.displays[i].display),s._info._X11.XSetForeground(s.displays[i].display,s.displays[i].window_right.gc,2==s.displays[i].borderState||6==s.displays[i].borderState?16776960:16711680),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].window_right,s.displays[i].window_right.gc,0,0,0,s.displays[i].bottom/2),s._info._X11.XSetForeground(s.displays[i].display,s.displays[i].window_right.gc,3==s.displays[i].borderState||7==s.displays[i].borderState?16776960:16711680),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].window_right,s.displays[i].window_right.gc,0,s.displays[i].bottom/2,0,s.displays[i].bottom),s._info._X11.XFlush(s.displays[i].display),s._info._X11.XSetForeground(s.displays[i].display,s.displays[i].window_bottom.gc,5==s.displays[i].borderState||1==s.displays[i].borderState?16776960:16711680),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].window_bottom,s.displays[i].window_bottom.gc,0,0,s.displays[i].right/2,0),s._info._X11.XSetForeground(s.displays[i].display,s.displays[i].window_bottom.gc,4==s.displays[i].borderState||0==s.displays[i].borderState?16776960:16711680),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].window_bottom,s.displays[i].window_bottom.gc,s.displays[i].right/2,0,s.displays[i].right,0),s._info._X11.XFlush(s.displays[i].display),s._info._X11.XSetForeground(s.displays[i].display,s.displays[i].window_left.gc,7==s.displays[i].borderState||3==s.displays[i].borderState?16776960:16711680),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].window_left,s.displays[i].window_left.gc,0,0,0,s.displays[i].bottom/2),s._info._X11.XSetForeground(s.displays[i].display,s.displays[i].window_left.gc,6==s.displays[i].borderState||2==s.displays[i].borderState?16776960:16711680),s._info._X11.XDrawLine(s.displays[i].display,s.displays[i].window_left,s.displays[i].window_left.gc,0,s.displays[i].bottom/2,0,s.displays[i].bottom),s._info._X11.XFlush(s.displays[i].display);s._timeout=setTimeout(s._isUnity?s.unity_drawBorder:s.timeoutHandler,400)}}switch(process.platform){case"win32":module.exports=new windows_monitorborder;break;case"linux":module.exports=new linux_monitorborder}