如何获取 Electron 中的操作系统窗口位置?

Jac*_*din 6 user-interface position electron

我试图让一个电子应用程序在屏幕上上次关闭时的同一位置重新打开。

为此,我有一个配置文件,用于记录窗口关闭时的边界。

function set(settingKey, settingValue) {
  nconf.set(settingKey, settingValue);
  nconf.save();
};

mainWindow.on('close', function () {
  config.set('bounds', mainWindow.getBounds());
});
Run Code Online (Sandbox Code Playgroud)

但是mainWindow,当我重新启动应用程序并通过指定xywidthheight选项或调用来设置 的位置时setBounds

mainWindow.setBounds(config.get('bounds'));
Run Code Online (Sandbox Code Playgroud)

窗口看起来比以前低一点。我发现y我得到的值没有考虑窗口的标题栏高度。

这个问题很相似,但解决方案会导致相同的问题。

我努力了:

  • mainWindow.getPosition
  • mainWindow.getContentBounds加上setContentBounds
  • electron.screen.getDisplayMatching(mainWindow.getBounds()).bounds

无济于事。前两种方法给了我完全相同的结果。最后一个给出{ x: 0, y: 0, width: 1920, height: 1080 }.

有谁知道如何获取电子中的操作系统窗口位置?

如果有帮助的话,我在 Wayland (Gnome 3.32)。

小智 4

看起来像是 Linux 上一个长期未解决的错误:

在 Linux 上,固定 BrowserWindow 的返回位置被意外修改

例如,以下内容:

const { app, BrowserWindow } = require ('electron');
let mainWindow = null;
function onAppReady ()
{
    let position = [ 200, 100 ];
    console.log ('init:', position);
    mainWindow = new BrowserWindow ({ x: position[0], y: position[1], width: 800, height: 600, show: false });
    console.log ('new:', mainWindow.getPosition ());
    mainWindow.loadURL (`file://${__dirname}/index.html`);
    mainWindow.on ('ready-to-show', () => { 
        mainWindow.show ();
        console.log ('show:', mainWindow.getPosition ()); });
    mainWindow.on ('close', () => { console.log ('close:', mainWindow.getPosition ()); });
    mainWindow.on ('closed', () => { app.quit (); });
}
app.on ('ready', onAppReady);
Run Code Online (Sandbox Code Playgroud)

结果是:

Linux 薄荷:

init: [ 200, 100 ]
new: [ 200, 100 ]
show: [ 201, 125 ]
close: [ 201, 125 ]
Run Code Online (Sandbox Code Playgroud)

乌班图:

init: [ 200, 100 ]
new: [ 200, 100 ]
show: [ 200, 100 ]
close: [ 200, 128 ]
Run Code Online (Sandbox Code Playgroud)