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