研究electron 总结

438 阅读1分钟

设置窗口优先级

    // 将窗口设置为始终置顶
    mainWindow.setAlwaysOnTop(true);

或者

  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    minimizable: false, // 添加这一行来禁止最小化
    alwaysOnTop: true, // 添加这一行来设置窗口始终置顶
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      contextIsolation: true,  // 确保这个是 true
      nodeIntegration: false   // 确保这个是 false
    }
  })

input输入框,始终获得焦点

在窗口激活的时候,设置input 获得焦点

// renderer.js
// 当窗口获得焦点时,设置 input 焦点
window.addEventListener('focus', () => {
  console.log('Window focus 事件触发'); // 确认事件是否触发
  if (myInput) {
    console.log('尝试在 window focus 时设置焦点');
    setTimeout(() => {
      myInput.focus();
    }, 10);
    // myInput.focus();
  } else {
    console.error('在 window focus 时未找到 myInput 元素');
  }
});

// 当 input 失去焦点时,如果窗口仍激活,则重新聚焦
if (myInput) {
  myInput.addEventListener('blur', () => {
    console.log('myInput blur 事件触发');
    // 检查窗口是否仍然是激活状态
    if (document.hasFocus()) {
      console.log('窗口仍激活,尝试重新聚焦 myInput');
      // 使用 setTimeout 避免可能的无限循环或冲突
      setTimeout(() => {
        // 再次检查元素状态
        myInput.focus();
      }, 0); // 使用 0ms 延迟
    } else {
      console.log('窗口已失去焦点,不重新聚焦 myInput');
    }
  });
}

设置应用自启动

const { app } = require('electron')
// 设置开机自启动
const setAutoLaunch = () => {
  app.setLoginItemSettings({
    openAtLogin: true,         // 启用开机自启动
    path: process.execPath,    // 应用程序的可执行文件路径
    args: ['--autostart'],     // 启动时的命令行参数
    enabled: true,             // 启用此登录项
    name: 'my-electron-app',   // 应用名称
    openAsHidden: true,        // 启动时隐藏窗口
  })
}
app.on('ready', () => {
  // 设置开机自启动
  setAutoLaunch()
})