186 lines
5.0 KiB
TypeScript
186 lines
5.0 KiB
TypeScript
import { ipcMain, app, screen, globalShortcut, BrowserWindow, dialog } from 'electron'
|
|
import { join } from "path";
|
|
const config = require('./config')
|
|
import './load-serialport'
|
|
import { keyword } from './KeyWord'
|
|
|
|
const child_process = require('child_process')
|
|
const crypto = require('crypto')
|
|
|
|
function queryPass(passPath: string, passValue: string) {
|
|
return new Promise(function (resolve, reject) {
|
|
try {
|
|
child_process.exec(`reg query ${passPath} /v ${passValue}`, (error: Error, stdout: string, stderr: string) => {
|
|
if (error) {
|
|
reject(error)
|
|
return
|
|
}
|
|
resolve({stdout, stderr})
|
|
});
|
|
} catch (error) {
|
|
reject(error)
|
|
}
|
|
})
|
|
}
|
|
|
|
function queryKey(keyPath: string, keyValue: string) {
|
|
return new Promise(function (resolve, reject) {
|
|
try {
|
|
child_process.exec(`reg query ${keyPath} /v ${keyValue}`, (error: Error, stdout: string, stderr: string) => {
|
|
if (error) {
|
|
reject(error)
|
|
return
|
|
}
|
|
resolve({stdout, stderr})
|
|
})
|
|
} catch (error) {
|
|
reject(error)
|
|
}
|
|
})
|
|
}
|
|
|
|
function cryptMD5(GUID: string) {
|
|
let md5 = crypto.createHash('md5')
|
|
let ciphertext = md5.update(GUID).digest('hex')
|
|
return ciphertext.slice(0,8)+'-'+ciphertext.slice(8,12)+'-'+ciphertext.slice(12,16)+'-'+ciphertext.slice(16,20)+'-'+ciphertext.slice(20,32)
|
|
}
|
|
|
|
const passPath = 'HKEY_CURRENT_USER\\SOFTWARE\\HwaSmart'
|
|
const passValue = 'BDAuthorization'
|
|
const keyPath = 'HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography'
|
|
const keyValue = 'MachineGuid'
|
|
|
|
async function checkLaunchEnv() {
|
|
try {
|
|
const passResult: any = await queryPass(passPath, passValue)
|
|
const keyResult: any = await queryKey(keyPath, keyValue)
|
|
if(cryptMD5(keyResult.stdout.slice(83,119) + keyword) == passResult.stdout.slice(72,108)){
|
|
return true
|
|
}else{
|
|
return false
|
|
}
|
|
// 成功
|
|
// 查询到 有这个app启动项
|
|
} catch (error) {
|
|
// 没有查询到该app启动项目
|
|
return false
|
|
}
|
|
}
|
|
|
|
var windows:Array<BrowserWindow> = [];
|
|
|
|
function createWindow(page: string, display: any) {
|
|
const win = new BrowserWindow({
|
|
fullscreen: true,
|
|
frame: false,
|
|
x: display.bounds.x,
|
|
y: display.bounds.y,
|
|
webPreferences: {
|
|
nodeIntegration: true,
|
|
preload: join(__dirname, 'preload.js')
|
|
}
|
|
})
|
|
|
|
ipcMain.on("APP_MOUNTED", (event) => {
|
|
const { sender } = event
|
|
if (page == 'satellite-data-monitor-platform') {
|
|
let depth = config.get('depth')
|
|
let secondary = config.get('secondary')
|
|
sender.send('deep', [depth, secondary])
|
|
}
|
|
})
|
|
|
|
if (process.env.NODE_ENV === 'development') {
|
|
win.loadURL(`http://localhost:3000/${page}.html`)
|
|
win.webContents.openDevTools()
|
|
} else {
|
|
win.loadFile(`dist/render/${page}.html`)
|
|
}
|
|
|
|
windows.push(win);
|
|
return win;
|
|
}
|
|
|
|
const sleep = (timeout:number) => {
|
|
return new Promise((resolve?:any)=>{
|
|
setTimeout(()=>{
|
|
resolve();
|
|
}, timeout)
|
|
})
|
|
}
|
|
|
|
async function launch() {
|
|
const displays = screen.getAllDisplays()
|
|
if (displays.length !== 4) {
|
|
createWindow('satellite-data-monitor-platform', displays[0])
|
|
await sleep(100);
|
|
createWindow('satellite-info-monitor-platform', displays[0])
|
|
await sleep(200);
|
|
createWindow('satellite-signal-monitor-platform', displays[0])
|
|
await sleep(300);
|
|
createWindow('satellite-state-monitor-platform', displays[0])
|
|
} else {
|
|
createWindow('satellite-data-monitor-platform', displays[0])
|
|
await sleep(200);
|
|
createWindow('satellite-info-monitor-platform', displays[1])
|
|
await sleep(400);
|
|
createWindow('satellite-signal-monitor-platform', displays[2])
|
|
await sleep(600);
|
|
createWindow('satellite-state-monitor-platform', displays[3])
|
|
}
|
|
|
|
// 屏蔽 F11 进入/退出全屏功能
|
|
globalShortcut.register('F11', () => { return })
|
|
}
|
|
|
|
ipcMain.on('CLOSE', (event) => {
|
|
const res = dialog.showMessageBox({
|
|
type: 'warning',
|
|
title: '警告',
|
|
message: '确定要关闭软件吗?',
|
|
detail: '关闭软件',
|
|
cancelId: 1, // 按esc默认点击索引按钮
|
|
defaultId: 0, // 默认高亮的按钮下标
|
|
buttons: ['确认', '取消'], // 按钮按索引从右往左排序
|
|
})
|
|
|
|
res.then((data)=>{
|
|
if(data.response == 0){
|
|
windows.forEach((key:BrowserWindow) => {
|
|
key.close();
|
|
});
|
|
windows = [];
|
|
}else{
|
|
console.log('not close software')
|
|
}
|
|
})
|
|
})
|
|
|
|
async function main() {
|
|
// 异步代码
|
|
const checkReault: any = await checkLaunchEnv()
|
|
console.log('env right:', checkReault)
|
|
|
|
// 异步代码执行完毕后执行的代码
|
|
if (checkReault) {
|
|
launch()
|
|
} else {
|
|
dialog.showErrorBox('系统提示', '软件启动出错,请联系售后技术支持人员')
|
|
process.exit(1)
|
|
}
|
|
}
|
|
|
|
app.whenReady().then(main)
|
|
|
|
app.on('window-all-closed', () => {
|
|
if (process.platform !== 'darwin') {
|
|
app.quit()
|
|
}
|
|
})
|
|
|
|
app.on('activate', () => {
|
|
if (BrowserWindow.getAllWindows().length === 0) {
|
|
launch()
|
|
}
|
|
})
|