Мне не удалось найти готовое решение для вас, но вы намекаете на ответ на свою проблему в своем вопросе. user32.dll доступен из node.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);
Launch блокнота и убедитесь, что заголовок окна "Untitled - Notepad. Если вы запустите приложение Electron, окно должно скрыться, но процесс остается. Я разместил видеоролик, демонстрирующий, что это действительно работает: https://youtu.be/4thydneqtyQ
Что касается второй половины вашего вопроса ...
Вам нужен какой-то способ, чтобы определить, какие окна вы хотите скрыть. Если вы можете использовать заголовок Window, то вышеуказанный метод будет работать.
Если вы не можете, вам понадобится другой способ оценить окно через API Win32 и сделать определение. Вы можете использовать EnumWindows (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633497(v=vs.85).aspx) через FFI, чтобы получить каждое окно, а затем использовать другие функции для его проверки и определения.
Если вы точно укажите, как вы планируете дифференцироваться, я посмотрю, смогу ли я найти для вас конкретное решение. В противном случае мое предложение - изучить, как это сделать с помощью user32.dll с помощью C# или C++, а затем перевести результат в Electron с помощью FFI.
О, черт возьми, ты настоящий МвП. Я не могу вас достаточно поблагодарить, вы не были выше и выше требования долга, такие люди, как вы, которые распространяли доброту во всем мире, я надеюсь отблагодарить некоторое время как-то. Спасибо вам, это очень ценится. – Ducky
Спасибо за добрые слова! :-) Мне потребовалось некоторое время, чтобы FFI корректно работала с Electron. Сказав это, если у вас возникнут какие-либо проблемы, дайте мне знать, и я посмотрю, что я могу сделать, чтобы помочь. –
Эй, я нашел это http://stackoverflow.com/a/10819641/3055031 для использования EnumWindows из User32.dll, завтра я собираюсь попытаться обернуть голову тем, как заставить их работать в узле. Просто я не знаю, какой тип переменной я бы наметил «WNDENUMPROC». Еще раз спасибо за вашу помощь, это очень ценится. – Ducky