2016-05-23 90 views
1

我一直在寻找NPM的一些软件包,这将允许我,对于Windows而言,只需要Linux和OSX支持就可以隐藏特定的打开窗口。例如,我希望能够隐藏和取消隐藏记事本窗口,但是如果我打开了多个记事本窗口,我不想将它们全部隐藏起来,我只想隐藏一个特定窗口。我希望它从任务栏中隐藏,而不是仅将不透明度设置为隐藏。隐藏电子应用程序的其他窗口/程序

有没有人知道NPM软件包具有此功能,或者甚至有可能吗?

我相信这在C#中等距将从user32.dll中

感谢来的ShowWindow。

回答

2

我无法为您找到一个开箱即用的解决方案,但是您在问题中提示了问题的答案。可以使用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 

这最后一个是重建机二进制文件的电子。

把下面的代码块中的电子申请:

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。

+0

哦该死的儿子,你是真正的MvP。我无法对你表示感谢,你不会超越责任的范围,像你这样在世界各地传扬善良的人,我希望能够回馈一些时间。谢谢你,非常感谢。 – Ducky

+0

谢谢你的客气话! :-)我花了一段时间才让FFI与Electron正常工作。话虽如此,如果你有任何麻烦让我知道,我会看看我能做些什么来帮助。 –

+0

嘿,我发现这个http://stackoverflow.com/a/10819641/3055031使用User32.dll中的EnumWindows,明天我要试着围绕如何让他们在Node中工作。只是我不知道我会将“WNDENUMPROC”映射到哪种变量类型。再次感谢您的帮助,非常感谢。 – Ducky

相关问题