Electron BrowserWindow 在聚焦时显示任务栏

问题描述 投票:0回答:4

我的应用程序是全屏游戏的覆盖层(alwaysOnTop),当用户单击我的覆盖层时,它会获得焦点并在游戏顶部显示任务栏。获得焦点很好,但我无法显示任务栏。

它在 BrowserWindow 文档中说

不是无法聚焦的工具箱窗口

暗示可以创建一个无法聚焦的窗口。

有谁知道如何创建工具箱窗口,或者只是避免在单击电子窗口时显示任务栏?


我应该提到我已经尝试过

setAlwaysOnTop
skipTaskbar
。我还有
transparent: true
frame: false


我创建的叠加层是“Safelane、Midlane、Offlane”按钮。当我运行该应用程序时,它显示在全屏应用程序 (Dota 2) 的顶部,如下所示:

enter image description here

点击界面后会出现任务栏。如果全屏应用程序(Dota)失去焦点,任务栏出现在顶部,这会破坏体验的连续性:

enter image description here

我希望体验保持像第一张图片一样——当用户单击叠加层中的任何内容时,任务栏不应显示。

Electron GitHub问题


其他解决方案信息——使用下面的 Gaafar 解决方案后

在设置中设置

kiosk: true

似乎不允许它呈现透明。窗口打开后在 
setKiosk(true)
 内使用 
setTimeout
 似乎有效。

我还发现任何使用

kiosk

fullscreen
 且具有透明度的窗口都存在渲染问题。它会在自身之上渲染多次,并且无法取消渲染项目(css 中的 display: none 不会执行任何操作)。我解决这个问题的方法是使用 
Electron Window Manager 创建一个没有任何内容的 kiosk
 窗口,并使用 HTML / CSS 界面创建其他非信息亭窗口。结果:

    所有界面都可以通过鼠标和键盘进行交互。
  1. 渲染的发生方式与 Electron 中的常规方式相同。
  2. 下面的全屏应用程序通过任何透明区域接收输入。
  3. 任务栏永远不会显示在任何输入上。
focus electron taskbar always-on-top
4个回答
6
投票

skipTaskbar: true

 是为了防止在任务栏中显示您的应用程序。

要完全隐藏任务栏,请使用全屏或信息亭模式

fullscreen: true

或者
kiosk: true


编辑: 存在一些问题,即全屏或信息亭模式会阻止窗口的透明度。 对我有用的解决方案是使用这些标志运行

--enable-transparent-visuals --disable-gpu



问题及解决方案:

https://github.com/electron/electron/issues/2170#issuecomment-145942717


0
投票
    showInActive();
  1. 设置你的BrowserWindows, focusable: false

0
投票
我要发布一个解决方案,有些人可能会面临全面筛选,我正面临这个问题,到处徘徊,这个 StackOverflow 帖子不断出现。

所以我将其发布在这里,以便遇到类似问题的人可以获得帮助。

当全屏任务栏妨碍时。

当您使用 mainWindow.setFullScreen(true) 全屏显示时,当您在家中(所有窗口最小化)时,任务栏会妨碍窗口。

解决方案如下:

ipcMain.on("fullscreenon",()=>{ mainWindow.setAlwaysOnTop(true, 'screen-saver'); mainWindow.setFullScreen(true); }) //The order of the commands is important below //don't setAlwaysOnTop() before getting out of fullscreen. ipcMain.on("fullscreenoff",()=>{ mainWindow.setFullScreen(false); mainWindow.setAlwaysOnTop(true, 'floating') })
基本上,默认情况下 setFullscreen 使用级别:“浮动”。我们需要更高的水平,“屏幕保护”是我认为的最高水平。


0
投票
现在是2024年8月,我使用的Electron版本是31.2.1。

我遇到了和你一样的问题。我尝试了很多方法但无法解决,直到我搜索“

https://github.com/electron/ Electron/issues/22907”。

根据''22097'中'caminin'先生的回复,在定义主窗口时添加'"thickFrame:false"即可。

mainWindow = new BrowserWindow({ ... thickFrame: false, //Thanks to Mr. caminin ... });
我测试成功了,希望你也能成功。

© www.soinside.com 2019 - 2024. All rights reserved.