如何获得电子操作系统窗口位置?

问题描述 投票:1回答:1

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

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

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

mainWindow.on('close', function () {
  config.set('bounds', mainWindow.getBounds());
});

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

mainWindow.setBounds(config.get('bounds'));

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

This question类似,但解决方案导致相同的问题。

我试过了:

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

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

有谁知道如何在电子中获得OS窗口位置?

如果它有帮助,我就在Wayland(Gnome 3.32)。

user-interface position electron
1个回答
2
投票

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

On Linux, returned position of fixed BrowserWindow gets unexpectedly modified

例如,以下内容:

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);

结果是:

Linux Mint:

init: [ 200, 100 ]
new: [ 200, 100 ]
show: [ 201, 125 ]
close: [ 201, 125 ]

Ubuntu的:

init: [ 200, 100 ]
new: [ 200, 100 ]
show: [ 200, 100 ]
close: [ 200, 128 ]
© www.soinside.com 2019 - 2024. All rights reserved.