electron 上一个窗口焦点/电子

weylhg0b  于 2023-03-21  发布在  Electron
关注(0)|答案(4)|浏览(295)

目前我正为一个坚韧的问题挠头。我刚从电子开始,到目前为止一切顺利。然而,当窗口被隐藏时(这是一个带有快捷方式的弹出窗口,当你按回车键时就会消失),我想把焦点放回前一个窗口。
我使用的是Mac,菜单栏显示了我以前的应用程序的名称,所以看起来焦点又回到了应用程序上,但并不完全是因为窗口没有被选中。
你知道怎么修吗?
谢谢!

guz6ccqo

guz6ccqo1#

对于Linux:我发现browserWindow.hide()可以正确地恢复焦点。
对于Windows:browserWindow.minimize()正确恢复焦点。
对于Mac:app.hide()可正确恢复焦点。不幸的是,调用app.hide()会隐藏所有窗口。没有已知的方法可以在不使用app.hide()隐藏所有窗口的情况下保持一些窗口打开。
这适用于Mac、Linux和Windows:

hide() {
    this.window.minimize();
    this.window.hide();
    if (process.platform == "darwin") this.app.hide()
}

show() {
    this.window.show();
    this.window.restore();
}
2j4z5cfb

2j4z5cfb2#

我刚刚在Github上发布了一个名为Popup Window的电子测试应用程序,它展示了如何正确地将焦点放回上一个窗口。这是我以前的一个项目的简化版本,只适用于macOS。我遇到了和你完全一样的问题,我记得我是通过隐藏应用程序而不是窗口来解决这个问题的,并处理窗口模糊事件来隐藏它...
啊...

主.js

const { app, BrowserWindow, globalShortcut, ipcMain } = require ('electron');
let mainWindow = null;
function onAppReady ()
{
    mainWindow = new BrowserWindow
    (
        {
            width: 600,
            height: 600,
            show: false,
            frame: false
        }
    );
    mainWindow.loadURL (`file://${__dirname}/index.html`);
    mainWindow.once ('closed', () => { mainWindow = null; });
    mainWindow.on ('blur', () => { mainWindow.hide (); });
    globalShortcut.register ("CommandOrControl+Alt+P", () => { mainWindow.show (); });
    ipcMain.on ('dismiss', () => { app.hide (); });
}
app.once ('ready', onAppReady);
app.once ('window-all-closed', () => { app.quit (); });
app.dock.hide ();

索引.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    <!-- All of the Node.js APIs are available in this renderer process. -->
    We are using Node.js <script>document.write(process.versions.node)</script>,
    Chromium <script>document.write(process.versions.chrome)</script>,
    and Electron <script>document.write(process.versions.electron)</script>.

    <script>
      // You can also require other files to run in this process
      require('./renderer.js')
    </script>
  </body>
</html>

渲染器.js

const { ipcRenderer } = require ('electron');
document.addEventListener
(
    'keydown',
    (event) =>
    {
        if (event.key === 'Enter')
        {
            event.preventDefault ();
            ipcRenderer.send ('dismiss');
        }
    }
);
snvhrwxg

snvhrwxg3#

添加以下内容对我很有效:

mainWindow.on('blur', () => app.hide())

我使用mainWindow.hide()来隐藏应用程序,在blur侦听器上添加app.hide()会将焦点返回到最后使用的应用程序。

0g0grzrc

0g0grzrc4#

如果您不希望看到应用程序最小化并从任务栏中隐藏其图标,并在隐藏时获得上一个窗口的焦点,请继续使用我的解决方案。

在Windows 11上,当当前窗口最小化时,先前聚焦的窗口会获得焦点。因此,如果你想隐藏任务栏图标,并使先前窗口获得焦点,我的解决方案将适用于你(仅在Windows 11和macOS Ventura上测试了单窗口应用):

hide() {
  if (process.platform === 'darwin') {
    // Hides the window
    this.searchWindow.hide();
    // Make other windows to gain focus
    app.hide();
  } else {
    // On Windows 11, previously active window gain focus when the current window is minimized
    this.searchWindow.minimize();
    // Then we call hide to hide app from the taskbar
    this.searchWindow.hide();
  }
}

show() {
  this.window.show();
  this.window.restore();
}

相关问题