# 1
在桌面軟件中,開機自啟動是很常見的功能,在electron中也提供了很好的支持,以下是主要代碼:
//應用是否打包
if (app.isPackaged) {
//設置開機啟動
app.setLoginItemSettings({
openAtLogin: true
});
}
//應用是否打包
if (app.isPackaged) {
//獲取是否開機啟動
const { openAtLogin } = app.getLoginItemSettings();
return openAtLogin;
}
設置開機啟動后,如果不稍加處理,用戶一開電腦,就會彈出你的軟件窗口,這樣不太友好。正常來說某些軟件只有用戶手動打開軟件時才彈出主窗口,開機啟動的話,只收起到系統托盤中會更好一些。
# 2
參考electron開機啟動相關文檔:appsetloginitemsettingssettings-macos-windows
windows
在windows下,setLoginItemSettings
方法有一個args
參數,利用這個參數就可以達到目的,以下是主要代碼:
//設置開機啟動
app.setLoginItemSettings({
openAtLogin: true,
args: ["--openAsHidden"],
});
//獲取是否開機啟動
const { openAtLogin } = app.getLoginItemSettings({
args: ["--openAsHidden"],
});
return openAtLogin;
設置開機啟動時,在args
中傳入--openAsHidden
,這個字符串可以隨便更改。獲取開機啟動時,也要在args
中傳入同樣的字符串,不然獲取不到正確的值。
然后在顯示主窗口時,先判斷一下process.argv
中是否包含--openAsHidden
,如果包含,說明是開機自動啟動的,這時候不顯示窗口;相反 如果不包含--openAsHidden
的話,說明是用戶手動啟動軟件,這時正常顯示窗口就好了:
win.once("ready-to-show", () => {
if (process.argv.indexOf("--openAsHidden") < 0)
win.show();
});
macOS
mac下沒有args
參數,可以通過openAsHidden
來實現。以下是主要代碼:
//設置開機啟動
app.setLoginItemSettings({
openAtLogin: true,
openAsHidden: true,
});
//獲取是否開機啟動
const { openAtLogin } = app.getLoginItemSettings();
return openAtLogin;
光設置openAsHidden: true
還不行,也需要做一下判斷:
win.once("ready-to-show", () => {
if (!app.getLoginItemSettings().wasOpenedAsHidden)
win.show();
});
# 3
以上就是我正在使用的Electron開機啟動時隱藏主窗口的方法,顯示系統托盤就用Tray
就行,比較簡單。如有其他更好的方式,歡迎交流。。。