从Electron App中隐藏其他窗口/程序

我一直在searchNPM的一些包,这将允许我,对于Windows只有Linux和OSX的支持是不需要的,隐藏特定的打开的窗口。 例如,我希望能够隐藏和取消隐藏记事本窗口,但是如果我有多个记事本窗口打开,我不想隐藏它们,我只想隐藏一个特定的窗口。 我想从任务栏中隐藏它,而不是将不透明度设置为隐藏。

有没有人知道有这个function的NPM包,或者甚至有可能吗?

我相信这个在C#中的等距离将是来自user32.dll的ShowWindow

谢谢。

我无法为您找到一个开箱即用的解决方案,但是您在问题中提示了您的问题的答案。 可以使用node-ffi从node.js / electron访问user32.dll。

要安装node-ffi,您需要node-gyp及其在Windows上的所有依赖关系。 请参阅https://github.com/nodejs/node-gyp#installation

接下来,您需要执行以下操作:

npm install ffi npm install electron-rebuild .\node_modules\.bin\electron-rebuild.cmd 

最后一个是重建Electron的本机二进制文件。

把下面的代码块放在你的Electron应用程序中:

 var FFI = require('ffi'); function TEXT(text){ return new Buffer(text, 'ucs2').toString('binary'); } var user32 = new FFI.Library('user32', { 'FindWindowW': ['int', ['string', 'string']], 'ShowWindow': ['int', ['int', 'int']] }); var handle = user32.FindWindowW(null, TEXT('Untitled - Notepad')); console.log(handle); user32.ShowWindow(handle, 0); 

启动记事本,并确保窗口标题是“无标题 – 记事本”。 如果你启动你的电子应用程序窗口应该隐藏,但过程依然存在。 我已经发布了一个视频,演示了这个工作: https : //youtu.be/4thydneqtyQ

至于你的问题的后半部分…

你需要一些方法来确定你想要隐藏的窗口。 如果你可以使用窗口标题,那么上面的方法将工作。

如果你不能,那么你需要通过Win32 API来评估窗口,并做出决定。 您可以通过FFI使用EnumWindows( https://msdn.microsoft.com/en-us/library/windows/desktop/ms633497 ( v= vs.85).aspx)来获取每个窗口,然后使用其他函数来检查它并做出决定。

如果您准确提供您打算区分的方式,我会查看是否可以找到具体的解决方案。 否则,我的建议是研究如何通过使用C#或C ++的user32.dll来完成,然后使用FFI将结果转换为Electron。