无法聚焦电子应用程序(在 Windows 上)

Wil*_*rie 4 windows focus electron

希望是一个简单的问题:我正在制作一个计时器样式的应用程序,我希望应用程序在计时器结束时重新获得焦点。当计时器结束时,应用程序成功弹出,我什至可以在第一个文本框中看到闪烁的光标,但是当我输入内容时,它仍然会转到其后面的应用程序。我已经尝试了电子文档中可以找到的所有方法(如下所列),但都不起作用。我是否还缺少其他途径,或者这根本不可能?

Object.values(windows).forEach((window) => { // windows here stores all the application's BrowserWindows
  window.focus();
  window.focusOnWebView();
  window.webContents.focus();
});
app.focus({ steal: true });
Run Code Online (Sandbox Code Playgroud)

谢谢!

小智 5

我也尝试了所有记录的方法,但没有任何效果(至少在 Windows 10 中)。

为了使应用程序位于顶部,我必须AlwaysOnTop像这样切换(渲染器进程):

let currentWindow = window.require("electron").remote.getCurrentWindow();
currentWindow.setAlwaysOnTop(true);
currentWindow.setAlwaysOnTop(false);
Run Code Online (Sandbox Code Playgroud)

但不幸的是,它对应用程序的焦点没有帮助。

人们说该BrowserWindow::restore()函数正确地将焦点设置回应用程序。所以你可能会做这样的事情(虽然看起来很糟糕):

currentWindow.minimize();
currentWindow.restore();
Run Code Online (Sandbox Code Playgroud)

有趣的是,我在其他 C++ 项目中也遇到了类似的问题,所以可能是与操作系统相关的问题。为了解决 C++ 项目中的问题,我必须SetForegroundWindow在激活窗口后调用函数。由于 ElectronJSBrowserWindow有一个getNativeWindowHandle返回 WindowsHWND句柄的函数,如果其他方法不起作用,也许你可以利用它。

祝你好运!