IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Script pour récupérer le HWND d'une fenêtre Windows


Sujet :

JavaScript

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Script pour récupérer le HWND d'une fenêtre Windows
    Bonjour,

    Voici mon problème. Je souhaiterais à partir d'une page web pouvoir gérer les fenêtres Windows ouvertes par l'utilisateur (ouvrir, fermer les fenêtres). Je souhaite donc passer par les fonctions EnumWindows, GetWindow et CloseWindow de la librairie USER32.DLL.

    Evidemment cela n'est pas possible directement en Javascript car le navigateur n'a pas accès aux fonctions Windows de la librairie USER32.DLL. Je pense donc utiliser un Activex.

    L'activex WScript.Shell permet de pouvoir utiliser la fonction RUN et lancer des fonctionnalités Windows.

    Ainsi, par exemple le code suivant fonctionne à partir d'une page web (testé):

    var WShell = new ActiveXObject("WScript.Shell" );
    WShell.Run("rundll32.exe user32.dll,LockWorkStation" );

    J'arrive donc à accéder à la procédure LockWorkStation de la librairie user32.

    Par contre, pour utiliser des fonctions retournant des valeurs, tel que EnumWindows, là je bloque.

    En effet, la ligne de code suivante
    var = WShell.Run("rundll32.exe user32.dll,EnumWindows" );

    ne retourne pas la valeur de la fonction EnumWindows contenue dans la librairie user32, mais retourne 0 ou 1 (la valeur du WShell.run!

    Comment donc récupérer la valeur de la fonction EnumWindows afin de récupérer les handler (HWND) des fenêtres actives, pour pouvoir effectuer ensuite un CloseWindow sur une fenêtre spécifique?

    En gros, j'aimerais faire la chose suivante à partir de Javascript:

    var listeFenetres = monActiveX.listeDesFenetresWindows.
    monActiveX.CloseWindow(listeFenetres[2]);

    Merci d'avance pour toutes vos réponses!

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    J'ose espérer que ce n'est pas possible...

    Sinon bonjour la faille de sécurité !!!

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par devyan Voir le message
    J'ose espérer que ce n'est pas possible...

    Sinon bonjour la faille de sécurité !!!
    Un ActiveX en soit est déjà une faille de sécurité (même si on demande l'avis de l'utilisateur).

    Sur le fait que le système que je veux mettre en place s'apparente plus ou moins à un hack je suis tout à fait d'accord avec toi. Seulement il ne s'agit pas d'un site web ouvert, c'est une application intranet. En fait pour résumer, via l'application web, l'utilisateur peut lancer des instances de connexion Citrix. Le but est de n'avoir, pour diverses raisons, qu'une seule fenêtre Citrix à la fois d'ouverte sur le poste. Donc lorsque l'utilisateur se connecte à ma page, je veux vérifier qu'il n'y a pas de Citrix ouvert, si c'est le cas, je veux fermer celle déjà ouverte. C'est pour cela que j'essaye de voir toutes les applis Windows qui tourne, et fermer celle que je veux....

    Je pense qu'il doit vraiment y avoir moyen avec un ActiveX mais je ne trouve pas...

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    Citation Envoyé par Alcofribas Nasier Voir le message
    C'est pour cela que j'essaye de voir toutes les applis Windows qui tourne, et fermer celle que je veux....
    même en intranet, les conséquences peuvent être dévastatrice (celle que tu fermes, c'est justement le dossier qu'il venait de mettre 2H à remplir ... et pas encore sauvegardé).
    Ne vaudrait-il pas mieux, pour un résultat équivalent, demander à l'utilisateur de fermer telle et telle fenêtre ?
    Au moins, c'est lui qui maîtrise ...

    Au pire, lui indiquer avant que telle et telle fenêtre vont être fermées.
    Il peut ainsi limiter la casse ...

    A+

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Citation Envoyé par Alcofribas Nasier Voir le message
    Un ActiveX en soit est déjà une faille de sécurité (même si on demande l'avis de l'utilisateur).

    Sur le fait que le système que je veux mettre en place s'apparente plus ou moins à un hack je suis tout à fait d'accord avec toi. Seulement il ne s'agit pas d'un site web ouvert, c'est une application intranet. En fait pour résumer, via l'application web, l'utilisateur peut lancer des instances de connexion Citrix. Le but est de n'avoir, pour diverses raisons, qu'une seule fenêtre Citrix à la fois d'ouverte sur le poste. Donc lorsque l'utilisateur se connecte à ma page, je veux vérifier qu'il n'y a pas de Citrix ouvert, si c'est le cas, je veux fermer celle déjà ouverte. C'est pour cela que j'essaye de voir toutes les applis Windows qui tourne, et fermer celle que je veux....

    Je pense qu'il doit vraiment y avoir moyen avec un ActiveX mais je ne trouve pas...

    Il y a probablement un moyen en programmant la chose DANS ton ActiveX.

  6. #6
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Puisque tu as toute latitude pour réaliser une action BigBrother qui mérite à elle seule la pendaison ou un séjour mexicain, pourquoi n'écris tu pas directement ton ActiveX (avec un VB6, cela te prendra quelques dizaines de minutes), d'autant plus que de mémoire la fonction EnumWindows prend comme paramètre une fonction de callback et ne renvoie pas du tout la liste de handle.

    Humoristiquement mais

    ERE

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par emmanuel.remy Voir le message
    Salut,

    Puisque tu as toute latitude pour réaliser une action BigBrother qui mérite à elle seule la pendaison ou un séjour mexicain, pourquoi n'écris tu pas directement ton ActiveX (avec un VB6, cela te prendra quelques dizaines de minutes), d'autant plus que de mémoire la fonction EnumWindows prend comme paramètre une fonction de callback et ne renvoie pas du tout la liste de handle.

    Humoristiquement mais

    ERE
    Et là est tout le problème en effet!
    J'aimerais bien écrire cet ActiveX si je n'avais pas ce problème du EnumWindows auquel je dois passer initialement un pointeur sur un handle! Pour l'instant, avec l'ActiveX que m'a gentiment créé un ami, le résultat retourne toujours nul... Je vais continuer à creuser. Merci.

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 644
    Points : 66 671
    Points
    66 671
    Billets dans le blog
    1
    Par défaut
    Pourvu qu'il te retourne null pendant encore longtemps

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Pourvu qu'il te retourne null pendant encore longtemps
    Sympa

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 644
    Points : 66 671
    Points
    66 671
    Billets dans le blog
    1
    Par défaut
    juste pour eviter un putch pantagruélique sur mes fenetres

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par Alcofribas Nasier Voir le message
    Sympa
    Rien d'étonnant : l'interventionnisme sur le poste client est assez éloigné de la philosophie (ouh le vilain mot !) du développement web

    A+

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Pour en revenir à mon Activex, j'ai une fonction GetWindowList qui me retourne une BSTR correspondant à la liste des fenêtres ouvertes. Lorsque j'exécute l'activex avec l'utilitaire TSTCON32.EXE Activex Control Test Container, je reçois bien en retour cette liste (non vide). Par contre, lorsque j'exécute l'activex à partir de ma fenêtre IE avec javascript, et que je fais un Alert sur le résultat de cette fonction, j'obtiens UNDEFINED. Est-ce parce que ma fonction retourne une BSTR et que Javascript ne peut l'interpréter??

  13. #13
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 644
    Points : 66 671
    Points
    66 671
    Billets dans le blog
    1
    Par défaut
    en général au niveau communication javascript ne sait pas récupérer grand chose d'autres que des strings

  14. #14
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    @Alcofribas Nasier: tu ne peux pas tout avoir ! Tu ne vas quand même pas faire de la programmation système en javascript au sein du navigateur ? Ton ActiveX doit prendre cette responsabilité: c'est à lui d'identifier la ou les bonnes fenêtres à fermer. D'ailleurs ne serait ce pas plutôt FindWindow et GetWindowText que tu devrais utiliser ?

    ERE

Discussions similaires

  1. [PowerBuilder] Récupérer la main sur une fenêtre modale
    Par jpdar dans le forum Powerbuilder
    Réponses: 3
    Dernier message: 12/06/2006, 15h21
  2. Gestionnaire pour reconnaitre l'activation d'une fenêtre ?
    Par Herode dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/01/2006, 18h38
  3. Coment récupérer le handle d'une fenêtre
    Par robocop2776 dans le forum MFC
    Réponses: 2
    Dernier message: 30/10/2005, 23h21
  4. Pb pour récupérer la velur d'une case à cocher
    Par muppetshow dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/04/2005, 22h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo