资源管理器重启后 electron 隐藏任务栏图标失效问题的解决方案

资源管理器重启后 electron 隐藏任务栏图标失效问题的解决方案

Jun 11, 2021
Tech
Solution

1. 问题现象 #

创建一个electron 窗口,设置skipTaskbar为true,即可隐藏应用的任务栏图标。

const {app, BrowserWindow} = require('electron')

function createWindow () {
  const mainWindow = new BrowserWindow({
    skipTaskbar: true
  })
  mainWindow.loadURL('https://www.baidu.com')
}

app.whenReady().then(() => {
  createWindow()
})

但是,重启资源管理器之后,任务栏的图标又会出现。

2. 解决方案 #

需要获取系统的资源管理器重启(伴随任务栏重建)事件,在事件处理中重新隐藏图标。

electron中可以通过hookWindowMessage来hook系统消息,但是任务栏的创建事件,是没有具体Windows Message ID的,需要通过Windows API RegisterWindowMessage来注册一个。 所以,封装了一个win-util的包,提供了这个API的调用。

完整代码如下:

const {app, BrowserWindow} = require('electron')
const winutil = require('win-util')

function createWindow () {
  const mainWindow = new BrowserWindow({
    skipTaskbar: true
  })

  var msgid = winutil().RegisterWindowMessage('TaskbarCreated')
  mainWindow.hookWindowMessage(msgid,(wParam,lParam)=>{
    console.log("TaskbarCreated");
    mainWindow.setSkipTaskbar(true)
  });

  mainWindow.loadURL('https://www.baidu.com')
}
app.whenReady().then(() => {
  createWindow()
})