隐藏 Electron 应用程序之外的其他窗口/程序

3
我一直在搜索NPM,寻找一种能让我在Windows上隐藏特定打开的窗口的包,不需要支持Linux和OSX。例如,我想能够隐藏和显示记事本窗口,但如果我有多个记事本窗口打开,我不想将它们全部隐藏,我只想隐藏一个 specific 的窗口。我希望它从任务栏中隐藏,而不是仅将不透明度设置为不可见。
有人知道是否有这种功能的NPM Package吗?
我相信,在C#中,ShowWindow来自user32.dll是其等效项。
谢谢。
1个回答

6
我无法为您找到现成的解决方案,但是您在问题中提到了答案。使用 node-ffi,可以从 node.js/electron 访问 user32.dll。
要安装 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);

打开记事本并确保窗口标题为“Untitled-记事本”。如果启动您的Electron应用程序,则窗口将隐藏,但进程仍然存在。我发布了一个视频,展示了这个方法的运作方式:https://youtu.be/4thydneqtyQ

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

您需要一些方法来识别要隐藏的窗口。如果您可以使用窗口标题,则上述方法将起作用。

如果您无法使用窗口标题,则需要通过Win32 API评估窗口并做出决定。您可以使用EnumWindows(https://msdn.microsoft.com/en-us/library/windows/desktop/ms633497(v=vs.85).aspx)通过FFI获得每个窗口,然后使用其他函数进行检查并做出决定。

如果您提供了区分窗口的具体方法,我将尝试找到一个特定的解决方案。否则,我的建议是研究如何使用C#或C++使用user32.dll进行操作,然后使用FFI将结果转换为Electron。


哦,天啊,你是真正的MvP。我无法感谢你足够了,你超越了职责范围,像你这样的人在世界上传播着善良,我希望能够回报你。非常感谢你。 - Ducky
谢谢你的赞美之词!:-) 我花了一些时间才成功地将 FFI 与 Electron 集成。话虽如此,如果你遇到任何问题,请告诉我,我会尽力提供帮助。 - Shawn Rakowski
嘿,我发现了这个http://stackoverflow.com/a/10819641/3055031 ,它是关于如何使用User32.dll中的EnumWindows函数的。明天我打算试着理解如何在Node中调用它们。只是我不知道应该将"WNDENUMPROC"映射为哪种变量类型。再次感谢你的帮助,非常感激。 - Ducky
好东西,完全不费力!我不确定自己是否完全理解 electron-rebuild 需要的根本原因,但这与 Electron 使用了不同于官方 Node 的 V8 版本有关,为 Node 编译的本机模块可能会与 Electron 使用的不同步。 这里有一些解释:https://github.com/electron/electron/blob/master/docs/tutorial/using-native-node-modules.md。 - Shawn Rakowski
1
没错,我做得很好,我甚至把它变成了一个npm模块,node-hide。当然,它仍然是一个正在进行中的工作,但它可以工作,我将在此基础上构建我的电子应用程序。如果我在那里给你信用,你介意吗? - Ducky
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接