'use strict' const { contextBridge, ipcRenderer } = require('electron') // 服务端管理面板是 http://127.0.0.1 下的 Web 页面,只放行窗口与显示器控制这两组能力, // 不把 ipcRenderer 交给页面,避免面板页面拿到主进程的任意通道 contextBridge.exposeInMainWorld('desktopShell', { platform: process.platform, minimize: () => ipcRenderer.invoke('window:minimize'), maximize: () => ipcRenderer.invoke('window:maximize'), close: () => ipcRenderer.invoke('window:close'), isMaximized: () => ipcRenderer.invoke('window:is-maximized'), onMaximizeChange: (callback) => { const handler = (_event, maximized) => callback(maximized) ipcRenderer.on('window:maximize-changed', handler) return () => ipcRenderer.removeListener('window:maximize-changed', handler) }, // 显示器菜单:列屏 / 按屏开窗 / 收窗 / 按设置重建。全屏放行与否由主进程判定, // 这里只透传,页面拿不到 ipcRenderer 本身 displays: { list: () => ipcRenderer.invoke('display:list'), open: (displayId, options) => ipcRenderer.invoke('display:open', displayId, options), close: (displayId) => ipcRenderer.invoke('display:close', displayId), relayout: () => ipcRenderer.invoke('display:relayout') } })