隐藏Electron App的其他窗口/程序

时间:2016-05-23 16:33:41

标签: node.js windows hide show-hide electron

我一直在寻找NPM的一些软件包,这些软件包允许我,因为Windows不支持Linux和OSX支持,隐藏特定的打开窗口。例如,我希望能够隐藏和取消隐藏记事本窗口,但是如果我打开了多个记事本窗口,我不想隐藏它们,我只想隐藏一个特定的窗口。我希望它可以从任务栏中隐藏,而不仅仅是将不透明度设置为不可见。

有没有人知道具有此功能的NPM包,或者它是否可能?

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

感谢。

1 个答案:

答案 0 :(得分:4)

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

要安装node-ffi,您需要在Windows上使用node-gyp及其所有依赖项。见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);

启动记事本并确保窗口标题为“无标题” - 记事本'。如果您启动Electron应用程序,窗口应隐藏,但过程仍然存在。我发布了一段视频,证明这确实有效:https://youtu.be/4thydneqtyQ

关于你问题的后半部分......

您需要某种方法来识别要隐藏的窗口。如果您可以使用Window标题,那么上述方法将起作用。

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

如果您准确提供了计划区分的方式,我会查看是否可以找到特定的解决方案。否则我的建议是研究如何使用C#或C ++通过user32.dll进行操作,然后使用FFI将结果转换为Electron。