希望有一个简单的问题:我正在制作一个计时器样式的应用程序,我希望该应用程序在计时器结束时重新获得焦点。当计时器结束时,应用程序成功地弹出,我甚至可以在第一个文本框中看到一个闪烁的光标,但当我输入一些东西时,它仍然会转到它后面的应用程序。我已经尝试了所有我能在电子文档中找到的方法(如下所列),但它们都不起作用。有没有我错过的另一条路,或者这是不可能的?
Object.values(windows).forEach((window) => { // windows here stores all the application's BrowserWindows
window.focus();
window.focusOnWebView();
window.webContents.focus();
});
app.focus({ steal: true });
谢谢!
发布于 2021-04-05 13:22:14
我也尝试了所有有文档记录的方法,但都没有真正有效(至少在Windows10中)。
要将应用程序置于顶部,我必须像这样切换AlwaysOnTop
(渲染器进程):
let currentWindow = window.require("electron").remote.getCurrentWindow();
currentWindow.setAlwaysOnTop(true);
currentWindow.setAlwaysOnTop(false);
但不幸的是,它对应用程序的焦点没有帮助。
People say BrowserWindow::restore()
函数正确地将焦点重新设置到应用程序上。因此,您可能会这样做(尽管它看起来很可怕):
currentWindow.minimize();
currentWindow.restore();
有趣的是,我在另一个C++项目中遇到了类似的问题,所以可能是与操作系统相关的问题。为了解决C++项目中的问题,我必须在激活窗口后调用SetForegroundWindow
函数。由于ElectronJS BrowserWindow
有一个返回Windows HWND
句柄的getNativeWindowHandle
函数,如果其他方法都不起作用,也许你可以利用这个函数。
祝好运!
https://stackoverflow.com/questions/66946739
复制相似问题