Electron:如何从渲染过程中最小化 window

Electron: How to minimize a window from a rendered process

场景

我有一个 window,它有一个 add task button 正在打开 window。每次用户单击它时,它都会打开一个 window。我在 add task window 上有一个最小化它的按钮。如何实现这个最小化按钮?

代码

我可以 close maximize window 使用以下代码:

var winclose = function () {
    window.close();
}

var winmaximize = function () {
    window.moveTo(0, 0);
    window.resizeTo(screen.width, screen.height);
}

但是,我找不到任何可以从渲染过程中最小化 window 的函数。

请帮忙,非常感谢;

注:

浏览器没有为开发者提供最小化它们的功能。但在这儿 是不同的场景。这里我使用的是 Electronjs 提供的 chromium。因此,在我们开发桌面应用程序时必须有一种方法可以做到这一点

虚拟下载link:download from OneDrive

您可以在相应的 BrowserWindow 实例上调用 minimize()。问题是如何最好地访问此实例,而这又取决于您如何打开 windows 以及最小化按钮的位置。从你的例子来看,我认为最小化按钮实际上在你想要关闭的 window 中,在这种情况下你可以最小化焦点 window,因为当用户点击它里面的按钮时,window 当前应该有焦点:

const { remote } = require('electron')
remote.BrowserWindow.getFocusedWindow().minimize();

或者,您可以使用 BrowserWindow.fromId() 访问有问题的 window,例如,如果您想最小化另一个 window 的任务 window .

如果您偶然发现此线程并正在使用 electron vue,您可以直接在渲染器中使用 this.$electron.remote.BrowserWindow.getFocusedWindow().minimize();

这对我有用:

const { remote } = require('electron')
remote.getCurrentWindow().minimize();

从渲染器最小化屏幕非常容易。 使用远程对象我们可以从渲染器最小化屏幕。假设您有一个按钮,当它被点击时会触发屏幕最小化。 Bellow 是执行此操作的函数。

const handleMinimise =()=>{
    remote.BrowserWindow.getFocusedWindow().minimize();
}

但首先你必须要求远程电子如下

const electron = require("electron")
const remote = electron.remote

或如下

const { remote } = require("electron")

旧线程,但应该注意远程模块被视为安全问题,不鼓励使用它(参见 here)。 它也在电子 12 中按原样弃用(参见 here)。

相反,您可以通过 IPC 发送命令来调用最小化。

来自渲染器:

ipcRenderer.send('minimize')

主线:

ipcMain.on('minimize', () => {
  win.minimize()
  // or depending you could do: win.hide()
})

你也可以只做一个切换(主要):

ipcMain.on('minimize', () => {
  win.isMinimized() ? win.restore() : win.minimize()
  // or alternatively: win.isVisible() ? win.hide() : win.show()
})

对于动态制作的 windows(如其他答案中所述,并且似乎是用例),您可以使用(代替 'win'):

BrowserWindow.getFocusedWindow()

如果你有多个 window(这就是重点),这会导致切换问题,但你可以使用 BrowserWindow.getAllWindows() 并迭代,如果你想恢复特定的 window 来自当前渲染器进程之外(比如通过 ID)。不知道您为什么要这样做,但为了完整起见,我将其包括在内。