2 votes

Masquer les autres fenêtres/ programmes à partir de l'application Electron

J'ai cherché sur NPM un package qui me permettrait, uniquement pour Windows sans prise en charge de Linux et OSX, de masquer des fenêtres ouvertes spécifiques. Par exemple, j'aimerais pouvoir masquer et afficher une fenêtre Bloc-notes, cependant si j'ai plusieurs fenêtres Bloc-notes ouvertes, je ne veux pas les masquer toutes, je veux en masquer uniquement une spécifique. Je voudrais qu'elle soit cachée de la barre des tâches et non simplement que son opacité soit réglée sur invisible.

Est-ce que quelqu'un connaît un package NPM avec cette fonctionnalité ou si c'est même possible ?

Je pense que l'équivalent en C# serait ShowWindow de user32.dll

Merci.

3voto

Shawn Rakowski Points 3820

Je n'ai pas pu localiser de solution clé en main pour vous, mais vous suggérez la réponse à votre problème dans votre question. user32.dll est accessible depuis node.js/electron en utilisant node-ffi.

Pour installer node-ffi, vous avez besoin de node-gyp et de toutes ses dépendances sur Windows. Voir https://github.com/nodejs/node-gyp#installation

Ensuite, vous devez faire ce qui suit:

npm install ffi
npm install electron-rebuild
.\node_modules\.bin\electron-rebuild.cmd

Ce dernier est pour reconstruire les binaires natifs pour Electron.

Placez le code suivant dans votre application 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);

Lancez le bloc-notes et assurez-vous que le titre de la fenêtre soit 'Sans titre - Bloc-notes'. Si vous lancez votre application Electron la fenêtre devrait se cacher, mais le processus reste. J'ai publié une vidéo qui montre que cela fonctionne : https://youtu.be/4thydneqtyQ

Quant à la seconde partie de votre question...

Vous devrez identifier de quelle fenêtre vous voulez cacher. Si vous pouvez utiliser le titre de la fenêtre alors la méthode ci-dessus fonctionnera.

Si vous ne le pouvez pas alors vous devrez trouver un autre moyen d'évaluer la fenêtre via l'API Win32 et prendre la décision. Vous pourriez utiliser EnumWindows (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633497(v=vs.85).aspx) via FFI pour obtenir chaque fenêtre et ensuite utiliser d'autres fonctions pour l'inspecter et prendre la décision.

Si vous fournissez exactement comment vous prévoyez de différencier, je verrai si je peux trouver une solution spécifique pour cela. Sinon, ma suggestion est de rechercher comment le faire via user32.dll en utilisant C# ou C++ et ensuite traduire le résultat en Electron en utilisant FFI.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X