Electron:如何最小化渲染进程中的窗口
Posted
技术标签:
【中文标题】Electron:如何最小化渲染进程中的窗口【英文标题】:Electron: How to minimize a window from a rendered process 【发布时间】:2016-10-08 08:36:33 【问题描述】:场景
我有一个窗口,它有一个 add task button
正在打开一个窗口。每次用户点击它,它都会打开一个窗口。我在add task window
上有一个按钮,可以将其最小化。这个最小化按钮如何实现?
代码
我可以使用下面的代码close
maximize
窗口:
var winclose = function ()
window.close();
var winmaximize = function ()
window.moveTo(0, 0);
window.resizeTo(screen.width, screen.height);
但是,我找不到任何可以从渲染进程中最小化窗口的函数。
请帮忙,非常感谢;
注意:
浏览器不向开发者提供最小化它们的功能。但在这里 是一个不同的场景。这里我使用的是 Electronjs 提供的铬。因此,在我们开发桌面应用程序时,一定有办法做到这一点
虚拟下载链接:download from OneDrive
【问题讨论】:
@mnwsmit 浏览器没有为开发者提供最小化它们的功能。但这是一个不同的场景。这里我使用的是 Electron js 提供的铬。因此,在我们开发桌面应用程序时,必须有办法做到这一点。 @mnwsmit 我希望你能删除重复的标签 那么,要明确一点,您想从该实例中最小化BrowserWindow
实例吗? IE。您想通过该窗口的 javascript 最小化该窗口吗?
我很抱歉不清楚。让我举个例子。我有一个窗口,它有一个 add task button
正在打开一个窗口。每次用户点击它,它都会打开一个窗口。我在add task window
上有一个按钮,可以将其最小化。如何实现这个最小化按钮?
我假设窗口是在main
进程中创建的? main
进程中是否有新创建的窗口的引用?
【参考方案1】:
您可以在相应的 BrowserWindow
实例上调用 minimize()
。问题是如何最好地访问此实例,而这又取决于您打开窗口的方式以及最小化按钮的位置。从您的示例中,我认为最小化按钮实际上位于您要关闭的窗口中,在这种情况下,您可以最小化焦点窗口,因为当用户单击其中的按钮时,窗口当前应该具有焦点:
const remote = require('electron')
remote.BrowserWindow.getFocusedWindow().minimize();
您也可以使用BrowserWindow.fromId()
来访问相关窗口,例如,如果您想从另一个窗口最小化任务窗口。
【讨论】:
创建时如何设置这个id? 嘿,电子遥控器发生了重大变化,因此远程对象从模块electron
移动到 @electron/remote
。 Breaking changes info here
所以你现在可以通过import BrowserWindow from "@electron/remote";
使用它【参考方案2】:
如果您偶然发现此线程并使用电子 vue,您可以直接在渲染器内部使用 this.$electron.remote.BrowserWindow.getFocusedWindow().minimize();
。
【讨论】:
this.$electron.remote 变量未在我的项目中定义,因此出现错误,例如无法获取未定义的 BrowserWindow 属性 @JigneshGothadiya 嘿,Jignesh,我对文档不是很熟悉,但我想现在他们可能已经更改了渲染器的电子 API,请查看文档。如果不是,那么你的代码很可能有其他问题,而不是这个 sn-p。【参考方案3】:这对我有用:
const remote = require('electron')
remote.getCurrentWindow().minimize();
【讨论】:
【参考方案4】:从渲染器最小化屏幕非常容易。使用远程对象,我们可以从渲染器最小化屏幕。假设您有一个在单击时触发屏幕最小化的按钮。 Bellow 是一个可以做到这一点的函数。
const handleMinimise =()=>
remote.BrowserWindow.getFocusedWindow().minimize();
但首先你必须要求远离电子,如下所示
const electron = require("electron")
const remote = electron.remote
或如下
const remote = require("electron")
【讨论】:
【参考方案5】:旧线程,但应注意远程模块被视为安全问题,不鼓励使用(请参阅here)。 它在电子 12 中也已被弃用(请参阅 here)。
相反,您可以通过 IPC 发送命令来调用最小化。
来自渲染器:
ipcRenderer.send('minimize')
主要:
ipcMain.on('minimize', () =>
win.minimize()
// or depending you could do: win.hide()
)
你也可以只做一个切换(在 main 中):
ipcMain.on('minimize', () =>
win.isMinimized() ? win.restore() : win.minimize()
// or alternatively: win.isVisible() ? win.hide() : win.show()
)
对于动态制作的窗口(如其他答案中所述,并且似乎是用例),您可以使用(代替“win”):
BrowserWindow.getFocusedWindow()
如果您有多个窗口(这是重点),这会产生切换问题,但如果您想从当前渲染器进程之外恢复特定窗口(例如通过 ID),您可以使用 BrowserWindow.getAllWindows()
并进行迭代.不知道您为什么要这样做,但为了完整起见,我将其包括在内。
【讨论】:
以上是关于Electron:如何最小化渲染进程中的窗口的主要内容,如果未能解决你的问题,请参考以下文章