import { app, shell, BrowserWindow, ipcMain } from 'electron' import { join } from 'path' import { electronApp, optimizer, is } from '@electron-toolkit/utils' import icon from '../../resources/icon.png?asset' import { exec } from 'child_process' import path from 'path' const getBaseConfig = () => { return new Promise((resolve) => exec( "chcp 936 && WMIC PROCESS WHERE name='LeagueClientUx.exe' GET commandline", (error, stdout, stderr) => { if (error) { resolve({ Auth: '', BASE_URL: '' }) return } if (stderr) { resolve({ Auth: '', BASE_URL: '' }) return } const tokenMatch = stdout.match(/--remoting-auth-token=([^\s"]+)/) const portMatch = stdout.match(/--app-port=([^\s"]+)/) const token = tokenMatch?.[1] || '' const auth = Buffer.from(`riot:${token}`).toString('base64') const port = portMatch?.[1] || '' resolve( token !== '' ? { Auth: `Basic ${auth}`, BASE_URL: `https://127.0.0.1:${port}` } : { Auth: 'Auth required', BASE_URL: '' } ) } ) ) } const getLOLClientWindowInfo = () => { const command = path.join(process.cwd(), '/resources/tool.exe -f getLOLClientWindowPosition') return new Promise((resolve) => exec(command, (error, stdout, stderr) => { if (error) { console.log('error', error) resolve({ ok: true }) return } if (stderr) { console.log('stderr', stderr) resolve({ ok: true }) return } console.log('stdout', stdout) try { const lines = stdout.split('\n') const windowItems = lines[0].split(' ').map(item => parseInt(item, 10)); const monitorItems = lines[1].split(' ').map(item => parseInt(item, 10)); resolve({ ok: true, client: { left: windowItems[0], top: windowItems[1], bottom: windowItems[2], right: windowItems[3], width: windowItems[4], height: windowItems[5] }, monitor: { left: monitorItems[0], top: monitorItems[1], bottom: monitorItems[2], right: monitorItems[3], width: monitorItems[4], height: monitorItems[5] } }) } catch (_) { resolve({ ok: true }) } // const tokenMatch = stdout.match(/--remoting-auth-token=([^\s"]+)/) // const portMatch = stdout.match(/--app-port=([^\s"]+)/) // const token = tokenMatch?.[1] || '' // const auth = Buffer.from(`riot:${token}`).toString('base64') // const port = portMatch?.[1] || '' // resolve( // token !== '' // ? { // Auth: `Basic ${auth}`, // BASE_URL: `https://127.0.0.1:${port}` // } // : { // Auth: 'Auth required', // BASE_URL: '' // } // ) }) ) } function createWindow() { // Create the browser window. const mainWindow = new BrowserWindow({ width: 900, height: 670, show: false, autoHideMenuBar: true, ...(process.platform === 'linux' ? { icon } : {}), webPreferences: { preload: join(__dirname, '../preload/index.js'), sandbox: false } }) mainWindow.on('ready-to-show', () => { mainWindow.show() }) mainWindow.webContents.setWindowOpenHandler((details) => { shell.openExternal(details.url) return { action: 'deny' } }) // HMR for renderer base on electron-vite cli. // Load the remote URL for development or the local html file for production. if (is.dev && process.env['ELECTRON_RENDERER_URL']) { mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL']) } else { mainWindow.loadFile(join(__dirname, '../renderer/index.html')) } } // This method will be called when Electron has finished // initialization and is ready to create browser windows. // Some APIs can only be used after this event occurs. app.whenReady().then(() => { // Set app user model id for windows electronApp.setAppUserModelId('com.electron') ipcMain.handle('getBaseConfig', getBaseConfig) ipcMain.handle('getLOLClientWindowInfo', getLOLClientWindowInfo) // Default open or close DevTools by F12 in development // and ignore CommandOrControl + R in production. // see https://github.com/alex8088/electron-toolkit/tree/master/packages/utils app.on('browser-window-created', (_, window) => { optimizer.watchWindowShortcuts(window) }) // 忽略证书错误 app.commandLine.appendSwitch('ignore-certificate-errors') createWindow() app.on('activate', function () { // On macOS it's common to re-create a window in the app when the // dock icon is clicked and there are no other windows open. if (BrowserWindow.getAllWindows().length === 0) createWindow() }) }) // Quit when all windows are closed, except on macOS. There, it's common // for applications and their menu bar to stay active until the user quits // explicitly with Cmd + Q. app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit() } }) // In this file you can include the rest of your app"s specific main process // code. You can also put them in separate files and require them here.