{"version":3,"sources":["jsdelivr-header.js","/npm/qgb-client-video@0.1.5/client.js"],"names":[],"mappings":"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","file":"/npm/qgb-client-video@0.1.5/client.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/qgb-client-video@0.1.5/client.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// Modules to control application life and create native browser window\r\n\r\nconst Screenshots = require('electron-screenshots-customer')\r\nconst {app, BrowserWindow,ipcMain,globalShortcut,Tray,nativeImage,dialog,screen } = require('electron')\r\nconst electron = require('electron')\r\nconst path = require('path')\r\nconst {execFile} = require(\"child_process\");\r\nvar exec = require('child_process').exec;\r\nconst {autoUpdater} = require('electron-updater');\r\nconst { domain } = require('process');\r\n// let packageInfo = require('./package.json')\r\nlet mainWindow = null;\r\nlet appIcon = null\r\nlet mediaWin=null;\r\nlet timer = null\r\nlet count = 0\r\n\r\nlet newMsgPopWin;\r\nlet showUnreadMsgDialog=false;\r\nvar leaveInter,\r\n    trayBounds,\r\n    point,\r\n    unReadWinInter,\r\n    position_x,\r\n    position_y,\r\n    isLeave = true;\r\nlet totalUnReadNum=0;\r\nlet newMsgCloseFlag=1;\r\n\r\nlet unReadMsgList={}\r\nlet isPro = true;\r\nlet doMain=isPro?\"https://client.qiguanbang.com\":\"https://client.gcw.net\"\r\n// let doMain=\"http://localhost:8081\"\r\nfunction updateHandle(window, feedUrl) {\r\n  mainWindow = window;\r\n  let message = {\r\n    error: '检查更新出错',\r\n    checking: '正在检查更新……',\r\n    updateAva: '检测到新版本，正在下载……',\r\n    updateNotAva: '现在使用的就是最新版本，不用更新',\r\n  };\r\n  //设置更新包的地址\r\n  autoUpdater.setFeedURL(feedUrl);\r\n  \r\n  //监听升级失败事件\r\n  autoUpdater.on('error', function (error) {\r\n    sendUpdateMessage({\r\n      cmd: 'error',\r\n      message: error\r\n    })\r\n  });\r\n  //监听开始检测更新事件\r\n  autoUpdater.on('checking-for-update', function (message) {\r\n    sendUpdateMessage({\r\n      cmd: 'checking-for-update',\r\n      message: message\r\n    })\r\n  });\r\n  //监听发现可用更新事件\r\n  autoUpdater.on('update-available', function (message) {\r\n    sendUpdateMessage({\r\n      cmd: 'update-available',\r\n      message: message\r\n    })\r\n  });\r\n  //监听没有可用更新事件\r\n  autoUpdater.on('update-not-available', function (message) {\r\n    sendUpdateMessage({\r\n      cmd: 'update-not-available',\r\n      message: message\r\n    })\r\n  });\r\n\r\n  // 更新下载进度事件\r\n  autoUpdater.on('download-progress', function (progressObj) {\r\n    sendUpdateMessage({\r\n      cmd: 'download-progress',\r\n      message: progressObj\r\n    })\r\n  });\r\n  //监听下载完成事件\r\n  autoUpdater.on('update-downloaded', function (event, releaseNotes, releaseName, releaseDate, updateUrl) {\r\n    sendUpdateMessage({\r\n      cmd: 'update-downloaded',\r\n      message: {\r\n        releaseNotes,\r\n        releaseName,\r\n        releaseDate,\r\n        updateUrl\r\n      }\r\n    })\r\n    //退出并安装更新包\r\n    autoUpdater.quitAndInstall();\r\n  });\r\n\r\n  //接收渲染进程消息，开始检查更新\r\n  ipcMain.on(\"checkForUpdate\", (e, arg) => {\r\n    //执行自动更新检查\r\n    // sendUpdateMessage({cmd:'checkForUpdate',message:arg})\r\n    autoUpdater.checkForUpdates();\r\n  })\r\n\r\n  ipcMain.on(\"screenShot\",(e,arg)=>{\r\n    const screenshots = new Screenshots.default()\r\n    screenshots && screenshots.startCapture()\r\n    // screenshots()\r\n  })\r\n\r\n}\r\n\r\n//给渲染进程发送消息\r\nfunction sendUpdateMessage(text) {\r\n  mainWindow.webContents.send('message', text)\r\n}\r\n\r\nconst Menu = electron.Menu;\r\nfunction PathUtils(dirPath){\r\n  let startPath = app.isPackaged ? path.join(__dirname, '..') :path.join(__dirname, '.');\r\n  return path.join(startPath, dirPath || '.');\r\n}\r\n\r\nfunction initTray(){\r\n  let iconName = PathUtils('static/icon/icon16.png')\r\n  let ningImage = nativeImage.createFromPath(iconName)\r\n  appIcon = new Tray(ningImage) // 创建与image关联的图标\r\n  var contextMenu = Menu.buildFromTemplate([ // 创建菜单\r\n    // {type: 'separator'},\r\n    {\r\n      label: '打开企管帮',\r\n      click: function() {\r\n        mainWindow.center()\r\n        mainWindow.show();\r\n      },\r\n    },\r\n    { label: '退出', click:function(){\r\n      //弹出对话框，确认当用户确实需要退出\r\n      dialog.showMessageBox({\r\n        type: 'info',\r\n        title: '温馨提示',\r\n        defaultId: 0,\r\n        message: '确定要退出企管帮吗?',\r\n        buttons: ['直接退出','取消']\r\n      }).then((result)=>{\r\n        if(result.response==0){\r\n          // mainWindow.close()\r\n          app.exit(0)\r\n        }\r\n      })\r\n    } },\r\n  ])\r\n  appIcon.setToolTip('企管帮') // 鼠标放在该系统托盘图标上的提示信息\r\n  appIcon.setContextMenu(contextMenu)\r\n\r\n  appIcon.on(\"double-click\",function () {\r\n    mainWindow.maximize();\r\n    mainWindow.show();\r\n    mainWindow.center();\r\n    newMsgPopWin.setPosition(position_x, position_y);\r\n  })\r\n  appIcon.on(\"click\",function () {\r\n    if(timer){\r\n      mainWindow.maximize();\r\n      mainWindow.show();\r\n      mainWindow.center();\r\n      appIcon.setImage(ningImage)\r\n      appIcon.setToolTip('企管帮')\r\n      clearInterval(timer)\r\n      timer = null\r\n      count = 0\r\n      mainWindow.webContents.send('setTimelineId')\r\n    }\r\n  })\r\n\r\n  appIcon.on(\"mouse-move\", () => {\r\n    if (isLeave) {\r\n        //触发mouse-enter\r\n        isLeave = false;\r\n        newMsgCloseFlag=1;\r\n        checkTrayLeave();\r\n    }else{//假如鼠标进入到托盘里面，则显示弹出框\r\n      if(showUnreadMsgDialog){\r\n        newMsgCloseFlag=0\r\n        newMsgPopWin.show()\r\n      }\r\n    }\r\n})\r\n\r\n}\r\n\r\nfunction createNewMsgWin(){\r\n\r\n  newMsgPopWin = new BrowserWindow({\r\n      width: 240, //悬浮窗口的宽度 比实际DIV的宽度要多2px 因为有1px的边框\r\n      height: 5, //悬浮窗口的高度 比实际DIV的高度要多2px 因为有1px的边框\r\n      type: 'toolbar',    //创建的窗口类型为工具栏窗口\r\n      frame: false,   //要创建无边框窗口\r\n      resizable: false, //禁止窗口大小缩放\r\n      show: false,    //先不让窗口显示\r\n      skipTaskbar:true,\r\n      webPreferences: {\r\n        preload: path.join(__dirname, 'preload.js'),\r\n        nodeIntegration: true,\r\n      },\r\n      // transparent: true,  //设置透明\r\n      alwaysOnTop: true,  //窗口是否总是显示在其他窗口之前\r\n  });\r\n  const size = screen.getPrimaryDisplay().workAreaSize;   //获取显示器的宽高\r\n  const winSize = newMsgPopWin.getSize();  //获取窗口宽高\r\n  //设置窗口的位置 注意x轴要桌面的宽度 - 窗口的宽度\r\n  position_x = parseInt(size.width - winSize[0]-200)\r\n  position_y = parseInt(size.height-winSize[1])\r\n  newMsgPopWin.setPosition(position_x, position_y);\r\n  let popupUrl = `${doMain}/#/popupWin`\r\n  newMsgPopWin.loadURL(popupUrl);\r\n}\r\n\r\nfunction createMediaWindow (items) {\r\n  mediaWin = new BrowserWindow({\r\n    width: 1184,\r\n    height:760,\r\n    resizable: false,\r\n    show: false,\r\n    center:true,\r\n    skipTaskbar:true,\r\n    frame:false,\r\n    webPreferences: {\r\n      preload: path.join(__dirname, 'preload.js'),\r\n      nodeIntegration: true,\r\n    }\r\n  })\r\n  mediaWin.loadURL(`file://${require.resolve('client-media-viewer/dist/index.html')}`)\r\n  mediaWin.once('ready-to-show', () => {\r\n    mediaWin.show();\r\n    setTimeout(function(){\r\n      mediaWin.webContents.send('initItems',items)\r\n    },100)\r\n  })\r\n  mediaWin.on('close',()=>{\r\n    mediaWin = null\r\n  })\r\n};\r\n\r\nfunction createWindow () {\r\n  let newwin = null;\r\n  let newimgWin = null\r\n  // // Create the browser window.\r\n  // Menu.setApplicationMenu(null)\r\n  const mainBrowserWindow = new BrowserWindow({\r\n    width: 1250,\r\n    height: 800,\r\n    resizable: false,\r\n    skipTaskbar:false,\r\n    // fullscreen: true,\r\n    // backgroundColor: '#2e2c29',\r\n    transparent: true,\r\n    show: false,\r\n    center:true,\r\n    frame:false,\r\n    webPreferences: {\r\n      preload: path.join(__dirname, 'preload.js'),\r\n      nodeIntegration: true,\r\n      webviewTag: true\r\n    }\r\n  })\r\n  // var winURL = process.env.NODE_ENV === 'development'\r\n  //   ? `http://localhost:8080`\r\n  //   : `http://client.gcw.net`\r\n  // mainWindow.loadURL('https://qiguanbang.gcw.net/')\r\n  // and load the index.html of the app.\r\n  // mainWindow.maximize()\r\n  // winURL = (process.env.PATH_ENV===\"prod\") ? \"https://client.qiguanbang.com\" : 'https://client.gcw.net'\r\n  winURL = doMain\r\n  console.log(\"----------->\",winURL)\r\n  mainBrowserWindow.loadURL(winURL);\r\n  // Open the DevTools.\r\n  // mainBrowserWindow.webContents.openDevTools({mode:'detach'})\r\n\r\n  // mainBrowserWindow.webContents.openDevTools()\r\n\r\n  //设置版本更新地址，即将打包后的latest.yml文件和exe文件同时放在\r\n  //http://xxxx/test/version/对应的服务器目录下,该地址和package.json的publish中的url保持一致\r\n  let feedUrl = \"https://sgb-manager-client.oss-cn-beijing.aliyuncs.com/builder/\";\r\n  // let feedUrl = packageInfo.build.publish[0].url;\r\n  //检测版本更新\r\n  updateHandle(mainBrowserWindow,feedUrl);\r\n\r\n\r\n  ipcMain.on(\"changeWinSize\",(e,arg)=>{\r\n    // mainWindow.setSize(950,1100)\r\n    if (mainWindow.isMaximized()) {\r\n      mainWindow.restore();\r\n    } else {\r\n      mainWindow.setResizable(true);\r\n      mainWindow.maximize();\r\n      mainWindow.setResizable(false);\r\n    }\r\n    mainWindow.center();\r\n  })\r\n  ipcMain.on(\"resetSize\",(e,arg)=>{\r\n    mainWindow.setResizable(true);\r\n    mainWindow.setSize(1400,900)\r\n    mainWindow.transparent = true\r\n    mainWindow.center();\r\n    mainWindow.setResizable(false);\r\n  })\r\n  ipcMain.on(\"resetWinSize\",(e,arg)=>{\r\n    mainWindow.setResizable(true);\r\n    mainWindow.setSize(350,500)\r\n    mainWindow.transparent = true\r\n    mainWindow.center();\r\n    mainWindow.setResizable(false);\r\n  })\r\n  ipcMain.on(\"registertWinSize\",(e,arg)=>{\r\n    mainWindow.setResizable(true);\r\n    mainWindow.setSize(1200,700)\r\n    mainWindow.transparent = true\r\n    mainWindow.center();\r\n    mainWindow.setResizable(false);\r\n  })\r\n\r\n\r\n  ipcMain.on(\"win-close\",(e,arg)=>{\r\n    mainWindow.close();\r\n  }),\r\n\r\n  //接收最小化命令\r\n  ipcMain.on('window-min', function() {\r\n    mainWindow.minimize();\r\n  })\r\n\r\n  ipcMain.on(\"resetNewWinSize\",(e,arg)=>{\r\n    if(!arg.type){\r\n      newwin.setSize(arg.x,arg.y)\r\n    }else if(arg.type == 'min'){\r\n      newwin.minimize()\r\n    }else if(arg.type == 'max'){\r\n      newwin.maximize()\r\n    }else{\r\n      newwin.unmaximize()\r\n    }\r\n    newwin.center();\r\n  })\r\n  // 关闭预览图片窗口\r\n  ipcMain.on(\"closeimgWin\",(e,arg)=>{\r\n    if(mediaWin){\r\n      mediaWin.close()\r\n    }\r\n    mediaWin = null\r\n  })\r\n  ipcMain.on(\"resetImgWinSize\",(e,arg)=>{\r\n    if(!arg.type){\r\n      newimgWin.setSize(arg.x,arg.y)\r\n    }else if(arg.type == 'min'){\r\n      newimgWin.minimize()\r\n    }else if(arg.type == 'max'){\r\n      newimgWin.maximize()\r\n    }else{\r\n      newimgWin.unmaximize()\r\n    }\r\n    newimgWin.center();\r\n  })\r\n  //关闭会议\r\n  ipcMain.on(\"closeMeet\",(e,arg)=>{\r\n    if(arg && arg.flg){\r\n      mainWindow.webContents.send('closeMeetApp',{flg:true})\r\n    }else{\r\n      newwin.close()\r\n      newwin = null\r\n      mainWindow.webContents.send('closeMeetApp')\r\n    }\r\n  })\r\n\r\n  //开启会议/创建房间\r\n  ipcMain.on(\"openMeet\",(e,arg)=>{\r\n    let width = arg.type ==  'join' ? 1184 : arg.type ==  'meetJoin' ? 600 : 864;\r\n    let height = arg.type ==  'join' ? 760 : arg.type ==  'meetJoin' ? 400 : 552;\r\n    newwin = new BrowserWindow({\r\n        width: width,\r\n        height: height,\r\n        // alwaysOnTop: true,\r\n        frame: false,\r\n        center: true,\r\n        resizable: false,\r\n        webPreferences: {\r\n          preload: path.join(__dirname, 'preload.js'),\r\n        }\r\n    })\r\n    let info = {type: arg.type,msg:arg.data}\r\n    let msg = JSON.stringify(info)\r\n    // let newwinURL = (process.env.PATH_ENV===\"prod\") ? \"https://client.qiguanbang.com\" : 'https://client.gcw.net'\r\n    // newwinURL = \"https://client.gcw.net\"\r\n    // newwinURL = \"https://client.qiguanbang.com\"\r\n    // newwinURL = \"http://localhost:8080\"\r\n    let url = `${doMain}/#/chatMeet?info=${msg}`\r\n    newwin.loadURL(url); //new.html是新开窗口的渲染进程\r\n    // newwin.webContents.openDevTools({mode:'detach'})\r\n    newwin.on('closed',()=>{\r\n      newwin = null\r\n    })\r\n  })\r\n  //预览图片窗口\r\n  ipcMain.on(\"images\",(e,arg)=>{\r\n    createMediaWindow(arg)\r\n  })\r\n\r\n\r\n\r\n  ipcMain.on(\"win-viewer-close\",(e,arg)=>{\r\n    mediaWin.close();\r\n  })\r\n\r\n  ipcMain.on(\"win-viewer-max\",(e,arg)=>{\r\n    if(arg.type == 'max'){\r\n      mediaWin.maximize()\r\n    }else{\r\n      mediaWin.unmaximize()\r\n    }\r\n  })\r\n\r\n  //接收最小化命令\r\n  ipcMain.on('win-viewer-min', function() {\r\n    mediaWin.minimize();\r\n  })\r\n  //接受传入图片数据信息\r\n  ipcMain.on('openMediaViwer', (e,arg)=>{\r\n    mediaWin.webContents.send('initItems',arg)\r\n  })\r\n\r\n  mainWindow.once('ready-to-show', () => {\r\n    mainWindow.show();\r\n  })\r\n\r\n  //证书安装\r\n  ipcMain.on(\"installCert\",(e,arg)=>{\r\n    installCert()\r\n  })\r\n\r\n  //项目重启\r\n  ipcMain.on(\"relaunch\",(e,arg)=>{\r\n    app.relaunch()\r\n    app.exit(0)\r\n  })\r\n  //托盘闪烁\r\n  ipcMain.on(\"setTwinkle\",(e,result)=>{\r\n    clearInterval(timer)\r\n    count = 0\r\n    newMsgCloseFlag=0;\r\n    let iconNewMsg = PathUtils('static/icon/icon16_new_msg.png')\r\n    let ningImage = nativeImage.createFromPath(iconNewMsg)\r\n    mainBrowserWindow.flashFrame(true)\r\n    //动态计算消息提示框的高度\r\n    unReadMsgList = result.unReadMsgList\r\n    totalUnReadNum = result.totalUnReadNum\r\n    if(totalUnReadNum>0){\r\n      showUnreadMsgDialog = true\r\n    }\r\n\r\n    n=Object.keys(unReadMsgList).length\r\n    let height = (n*26 + 40)\r\n    newMsgPopWin.setResizable(true)\r\n    newMsgPopWin.setSize(240,height)\r\n    newMsgPopWin.setResizable(false)\r\n    const size = screen.getPrimaryDisplay().workAreaSize;   //获取显示器的宽高\r\n    const winSize = newMsgPopWin.getSize();  //获取窗口宽高\r\n    // newMsgPopWin.webContents.openDevTools()\r\n    let trayBounds = appIcon.getBounds()\r\n    position_x = parseInt(trayBounds.x-(winSize[0]/2));\r\n    position_y =  parseInt(size.height-height);\r\n    newMsgPopWin.setPosition(position_x,position_y);\r\n    //发送未读消息列表给消息提示框\r\n    newMsgPopWin.webContents.send('showUnreadMsgList', {data:unReadMsgList})\r\n    timer = setInterval(() => {\r\n      count += 1\r\n      if (count % 2 === 0) {\r\n        appIcon.setImage(ningImage)\r\n      } else {\r\n        appIcon.setImage(nativeImage.createEmpty()) // 创建一个空的nativeImage实例\r\n      }\r\n      appIcon.setToolTip('您有新消息')\r\n    }, 500)\r\n  })\r\n  ipcMain.on(\"setHideTwinkle\",(e,result)=>{\r\n    clearInterval(timer)\r\n    count = 0\r\n    timer = null\r\n    let iconName = PathUtils('static/icon/icon16.png')\r\n    let ningImage = nativeImage.createFromPath(iconName)\r\n    totalUnReadNum = result.totalUnReadNum\r\n    unReadMsgList = result.unReadMsgList;\r\n    newMsgPopWin.webContents.send('showUnreadMsgList', {data:unReadMsgList})\r\n    if(totalUnReadNum==0){\r\n      showUnreadMsgDialog = false;\r\n      appIcon.setImage(ningImage)\r\n      appIcon.setToolTip('企管帮')\r\n    }else{\r\n      timer = setInterval(() => {\r\n        count += 1\r\n        if (count % 2 === 0) {\r\n          let iconName = PathUtils('static/icon/icon16_new_msg.png')\r\n          let ningImage = nativeImage.createFromPath(iconName)\r\n          appIcon.setImage(ningImage)\r\n        } else {\r\n          appIcon.setImage(nativeImage.createEmpty()) // 创建一个空的nativeImage实例\r\n        }\r\n        // appIcon.setToolTip('您新消息')\r\n      }, 500)\r\n    }\r\n\r\n\r\n    //手动计算当前窗口的高度和起始位置\r\n    let n=Object.keys(unReadMsgList).length\r\n    let height = (n*26 + 40)\r\n    newMsgPopWin.setResizable(true)\r\n    newMsgPopWin.setSize(240,height)\r\n    newMsgPopWin.setResizable(false)\r\n    const size = screen.getPrimaryDisplay().workAreaSize;   //获取显示器的宽高\r\n    const winSize = newMsgPopWin.getSize();  //获取窗口宽高\r\n    // newMsgPopWin.webContents.openDevTools()\r\n    let trayBounds = appIcon.getBounds()\r\n    position_x = parseInt(trayBounds.x-(winSize[0]/2));\r\n    position_y =  parseInt(size.height-height);\r\n    newMsgPopWin.setPosition(position_x,position_y);\r\n  })\r\n\r\n  //控制当前消息提示框是否显示\r\n  ipcMain.on('unreadMsgShow',(e,result)=> {\r\n     clearInterval(leaveInter)\r\n     clearInterval(unReadWinInter)\r\n     let bounds = newMsgPopWin.getContentBounds();\r\n     //假如当前数据指针所在的位置在这个边际值内，则显示当前未读消息窗体，否则就显示\r\n     let left = bounds.x;\r\n     let top = bounds.y;\r\n     let width = bounds.width;\r\n     let height = bounds.height;\r\n     unReadWinInter =  setInterval(function(){\r\n        let currentPoiter = screen.getCursorScreenPoint();\r\n        if((totalUnReadNum>0)&&(newMsgCloseFlag==0)&&(currentPoiter.x >=left &&(currentPoiter.x<=left+width)) &&((currentPoiter.y>=top)&&(currentPoiter.y<=top+height+25)) ){\r\n          newMsgPopWin.show()\r\n          isLeave = false\r\n        }else{\r\n          isLeave = true\r\n        }\r\n        if(isLeave){\r\n          console.log(isLeave)\r\n          newMsgPopWin.hide()\r\n          clearInterval(unReadWinInter)\r\n        }\r\n      },100)\r\n  })\r\n\r\n  ipcMain.on(\"closeUreadDialog\",function(e,arg){\r\n    newMsgCloseFlag=1;\r\n    newMsgPopWin.hide()\r\n  })\r\n\r\n  ipcMain.on(\"markAsRead\",(e,arg)=>{\r\n    // mainBrowserWindow.flashFrame(false)\r\n    mainWindow.maximize();\r\n    mainWindow.show();\r\n    mainWindow.center();\r\n    newMsgCloseFlag=1;\r\n    mainWindow.webContents.send('setTimelineId',arg)\r\n    //手动计算消息回复框的高度\r\n    newMsgPopWin.hide()\r\n    // if(totalUnReadNum==0){\r\n    //   newMsgCloseFlag=1;\r\n    //   newMsgPopWin.hide()\r\n    // }\r\n  })\r\n  if(process.platform != 'darwin'){\r\n    mainBrowserWindow.on(\"close\",(e)=>{\r\n      mainBrowserWindow.hide();\r\n      e.preventDefault()\r\n    })\r\n  }\r\n  mainBrowserWindow.on('focus', () => {\r\n    mainBrowserWindow.flashFrame(false);\r\n  })\r\n}\r\n\r\nconst gotTheLock = app.requestSingleInstanceLock()\r\nif(!gotTheLock){\r\n  app.quit()\r\n}else{\r\n  // This method will be called when Electron has finished\r\n  // initialization and is ready to create browser windows.\r\n  // Some APIs can only be used after this event occurs.\r\n  app.whenReady().then(() => {\r\n    createNewMsgWin()\r\n    createWindow()\r\n    initScreenshots()\r\n    app.on('activate', function () {\r\n      // On macOS it's common to re-create a window in the app when the\r\n      // dock icon is clicked and there are no other windows open.\r\n      if (BrowserWindow.getAllWindows().length === 0) createWindow()\r\n    })\r\n    app.setAppUserModelId('企管帮')\r\n    // 注册打开devTools\r\n    globalShortcut.register('CommandOrControl+p', () => {\r\n      mainWindow.webContents.openDevTools()\r\n    })\r\n    globalShortcut.register('CommandOrControl+Alt+O', () => {\r\n      mainWindow.webContents.send('installShow')\r\n    })\r\n    // 查看当前在线用户列表\r\n    globalShortcut.register('CommandOrControl+h', () => {\r\n      mainWindow.webContents.send('openOnlineList')\r\n    })\r\n\r\n    globalShortcut.register('CommandOrControl+l', () => {\r\n      mainWindow.webContents.send('viewLocation')\r\n    })\r\n  })\r\n\r\n  // Quit when all windows are closed, except on macOS. There, it's common\r\n  // for applications and their menu bar to stay active until the user quits\r\n  // explicitly with Cmd + Q.\r\n  app.on('window-all-closed', function () {\r\n    if (process.platform !== 'darwin') app.quit()\r\n  })\r\n\r\n  app.on('ready', () => {\r\n    initTray()\r\n  })\r\n  app.on('second-instance', (event, commandLine, workingDirectory) => {\r\n    // 当运行第二个实例时,将会聚焦到myWindow这个窗口\r\n    if (mainWindow) {\r\n      if (mainWindow.isMinimized()) mainWindow.restore()\r\n      mainWindow.center()\r\n      mainWindow.focus()\r\n    }\r\n  })\r\n  // In this file you can include the rest of your app's specific main process\r\n  // // code. You can also put them in separate files and require them here.\r\n}\r\n\r\n\r\n\r\n\r\n/**\r\n   * 初始化截图\r\n   */\r\nfunction initScreenshots () {\r\n  const screenshots = new Screenshots.default()\r\n  screenshots && screenshots.on('ok', (e, obj) => {\r\n    mainWindow.show()\r\n    mainWindow.webContents.send('edirBlur',obj.dataURL)\r\n    // setTimeout(()=>{\r\n    //   mainWindow.webContents.paste()\r\n    // },500)\r\n  })\r\n  screenshots && screenshots.on('cancel', (e, obj) => {\r\n    mainWindow.show()\r\n  })\r\n  // globalShortcut.unregisterAll()\r\n  globalShortcut.register('CommandOrControl+Alt+Z', ()=>{\r\n    screenshots && screenshots.startCapture();\r\n    // screenshots()\r\n  })\r\n\r\n  globalShortcut.register('CommandOrControl+Alt+B', ()=>{\r\n    newMsgPopWin && newMsgPopWin.show();\r\n    // screenshots()\r\n  })\r\n}\r\nfunction screenshots(){\r\n  let url = PathUtils('static/screenshots/ComeCapture.exe')\r\n  let screenWindow = execFile(url)\r\n  screenWindow.on('exit', function (code) {\r\n    // 执行成功返回 1，返回 0 没有截图\r\n    if (code) {\r\n      mainWindow.show()\r\n      mainWindow.webContents.send('edirBlur')\r\n      setTimeout(()=>{\r\n        mainWindow.webContents.paste()\r\n      },400)\r\n    }\r\n  })\r\n}\r\n//证书安装\r\nfunction installCert(){\r\n  let url = PathUtils('static/cert/install_cert.bat')\r\n  let installCert = execFile(url)\r\n  installCert.on('exit', function (code,signal) {\r\n  })\r\n}\r\n\r\n\r\nfunction checkTrayLeave(){\r\n  clearInterval(leaveInter)\r\n  clearInterval(unReadWinInter)\r\n  leaveInter = setInterval(function(){\r\n      trayBounds = appIcon.getBounds();\r\n      point = screen.getCursorScreenPoint();\r\n      if(!(trayBounds.x < point.x && trayBounds.y < point.y && point.x < (trayBounds.x + trayBounds.width) && point.y < (trayBounds.y  + trayBounds.height))){\r\n          //触发mouse-leave\r\n          clearInterval(leaveInter);\r\n          isLeave = true;\r\n          setTimeout(function(){\r\n            if(isLeave){\r\n              newMsgPopWin.hide();\r\n            }\r\n          },800)\r\n      }\r\n  },100)\r\n}\r\n"]}