我无法为您找到现成的解决方案,但是您在问题中提到了答案。使用 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。