从 Electron App 中隐藏其他 windows/programs
Hiding other windows/programs from Electron App
我一直在 NPM 中搜索一些允许我的包,对于 Windows 仅 Linux 和 OSX 不需要支持,隐藏特定的打开 windows.例如,我希望能够隐藏和取消隐藏记事本 window,但是如果我打开了多个记事本 windows,我不想将它们全部隐藏,我只想隐藏一个特定的记事本.我希望它从任务栏中隐藏起来,而不仅仅是将不透明度设置为不可见。
有没有人知道具有此功能的 NPM 包或者它是否可能?
我相信这在 C# 中的等距是 user32.dll
的 ShowWindow
谢谢。
我无法为您找到 out-of-the-box 解决方案,但您在问题中暗示了问题的答案。 user32.dll 可从节点访问。js/electron 使用 node-ffi.
要安装 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);
启动记事本并确保 window 标题为 'Untitled - Notepad'。如果您启动 Electron 应用程序,window 应该隐藏,但该过程仍然存在。我发布了一个视频来证明这确实有效:https://youtu.be/4thydneqtyQ
关于你问题的后半部分...
您需要一些方法来确定要隐藏的 Window。如果你可以使用 Window 标题,那么上面的方法就可以了。
如果不能,那么您将需要一些其他方法通过 Win32 API 评估 Window 并做出决定。您可以通过 FFI 使用 EnumWindows (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633497(v=vs.85).aspx) 获取每个 window,然后使用其他函数对其进行检查并做出决定。
如果您确切地提供了您打算如何区分,我会看看是否可以找到具体的解决方案。否则我的建议是研究如何通过 user32.dll 使用 C# 或 C++ 来完成它,然后使用 FFI 将结果转换为 Electron。
我一直在 NPM 中搜索一些允许我的包,对于 Windows 仅 Linux 和 OSX 不需要支持,隐藏特定的打开 windows.例如,我希望能够隐藏和取消隐藏记事本 window,但是如果我打开了多个记事本 windows,我不想将它们全部隐藏,我只想隐藏一个特定的记事本.我希望它从任务栏中隐藏起来,而不仅仅是将不透明度设置为不可见。
有没有人知道具有此功能的 NPM 包或者它是否可能?
我相信这在 C# 中的等距是 user32.dll
的 ShowWindow谢谢。
我无法为您找到 out-of-the-box 解决方案,但您在问题中暗示了问题的答案。 user32.dll 可从节点访问。js/electron 使用 node-ffi.
要安装 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);
启动记事本并确保 window 标题为 'Untitled - Notepad'。如果您启动 Electron 应用程序,window 应该隐藏,但该过程仍然存在。我发布了一个视频来证明这确实有效:https://youtu.be/4thydneqtyQ
关于你问题的后半部分...
您需要一些方法来确定要隐藏的 Window。如果你可以使用 Window 标题,那么上面的方法就可以了。
如果不能,那么您将需要一些其他方法通过 Win32 API 评估 Window 并做出决定。您可以通过 FFI 使用 EnumWindows (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633497(v=vs.85).aspx) 获取每个 window,然后使用其他函数对其进行检查并做出决定。
如果您确切地提供了您打算如何区分,我会看看是否可以找到具体的解决方案。否则我的建议是研究如何通过 user32.dll 使用 C# 或 C++ 来完成它,然后使用 FFI 将结果转换为 Electron。