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

VB.NET Discussion :

Connaitre le processus d'une appli Modern UI ouverte sur le bureau


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : Mars 2011
    Messages : 109
    Par défaut Connaitre le processus d'une appli Modern UI ouverte sur le bureau
    Bonjour,

    Je développe un soft permettant de "piloter" au moyen d'une télécommande diverses applications multimédia.
    Ce pilotage est fait à la façon d'un être humain (envoi de raccourcis claviers, clics souris simulés..).
    Pour ça j'ai besoin de connaître divers choses (id du programme, handle de fenêtre..).
    Il n'y a pas de problème avec les applications classique, mais je voudrais utiliser aussi certaine applications Modern UI (celles pouvant tourner sur le bureau), notemment Netflix.
    Pour le lancement, j'utilise la class process et le lien "netflix:///". Le processus est bien lancé, mais je n'ai pas d'id de processus en retour.
    Je me suis aperçu que c'est l'application "ApplicationFrameHost" qui gère le processus. En récupérant son id, je peux "piloter" l'application netflix.

    Ma question est donc : comment récupérer l'id du processus après lancement de l'application au moyen du lien ?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : Mars 2011
    Messages : 109
    Par défaut
    up up ...
    Personne n'a d'idées ? (ou plutôt de connaissances)

    J'ai lancé deux applis Modern UI (Netflix et Edge) sur le bureau (donc dans deux fenêtres, et non en plein écran). Si, dans le gestionnaire des tâches, je supprime le processus "ApplicationFrameHost", les *deux* applis sont tuées et supprimées de la mémoire. ???

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Ce n'est pas vraiment recommande. Les applications pour W8/W10 sont concues pour suivre un cycle de vie bien precis, et il est regule par Windows.

    Plus d'info ici : App lifecycle.

    Les applications ecrites en HTML/JavaScript tournent en principe au sein d'un process "WWAHost.exe". Le seul moyen de savoir lequel killer est de connaitre son PID... Sinon, les apps ecrites en C#/C++ tournent dans leur propre process qui est en principe identifiable grace au nom de l'exe.

    Mais encore une fois, il vaut mieux eviter de tuer les apps Modern UI...
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : Mars 2011
    Messages : 109
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Les applications ecrites en HTML/JavaScript tournent en principe au sein d'un process "WWAHost.exe". Le seul moyen de savoir lequel killer est de connaitre son PID... Sinon, les apps ecrites en C#/C++ tournent dans leur propre process qui est en principe identifiable grace au nom de l'exe.

    Mais encore une fois, il vaut mieux eviter de tuer les apps Modern UI...
    Merci de ta réponse.
    Mon but n'est pas de tuer les applis modern UI (uniquement celles tournant sur le bureau), mais d'avoir un certain contrôle sur la fenêtre de ces applis.
    Je veux pouvoir appliquer à ces fenêtres les mêmes commandes qu'aux fenêtres des applis classiques. (Set/GetForegroundWindow, Set/GetWindowPlacement etc...).
    Donc j'ai effectivement besoin de connaître l'id du processus lancé (c'était ma question de départ).
    Par exemple si je lance Microsoft Edge, je peux connaître le handle de fenêtre et appliquer mes commandes en recherchant l'id du processus.... "ApplicationFrameHost".
    Idem en lançant netflix: c'est aussi en recherchant l'id de "ApplicationFrameHost" que je peux commander cette appli...

    Je lance ces applis au moyen de la class process en donnant l'URL de l'appli (netflix:, microsoft-edge: ). En retour l'id du processus vaut 0.
    D'où ma question : comment obtenir l'id du processus lancé ?

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Pas sur, mais si tu lances l'application en utilisant Process.Start, tu peux recuperer le PID comme suit :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim process = New Process()
    process.StartInfo.FileName = "tonprocess.exe"
    process.Start()
     
    Console.WriteLine("PID: " & process.Id)
    Sinon, si la fenetre du process s'ouvre en tant que fenetre principale, tu dois aussi pouvoir le recuperer en utilisant Process.MainWindowHandle. A noter, cette propriete peut etre vide pendant un certain temps, donc il faut parfois boucler dessus et eventuellement faire quelques sleep en attendant que la valeur arrive...

    A tester car je n'ai jamais teste cela avec des apps W8/W10...
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : Mars 2011
    Messages : 109
    Par défaut
    Bon, après divers essais, la class process et une appli modern UI ne sont pas fait l'un pour l'autre

    Si je défini Firefox comme navigateur par défaut et que j'exécute ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
           Try
                Dim mprocess As New Process
                mprocess.StartInfo.FileName = "url"      ' url est une adresse internet
                mprocess.StartInfo.UseShellExecute = True
                mprocess.Start()
                idprg = mprocess.Id
                appli=mprocess.ProcessName
            Catch ex As Exception
                 MessageBox.Show(ex.ToString)
            End Try
    cela fonctionne bien :
    - ouverture du navigateur sur le site voulu dans url
    - idprg contient l'id du processus et appli son nom (firefox)
    idem avec d'autres navigateurs (IE, opera..)

    Si, par contre, je défini Microsoft Edge (appli modern UI) comme navigateur par défaut:
    - ouverture du navigateur sur le site voulu dans url (ça c'est bon)
    - affichage d'un message d'erreur : "System.InvalidOperationException: Aucun processus n'est associé à cet objet." (à la ligne idprg=mprocess.Id)

    En attendant d'en savoir plus, je vais bricoler un truc dans le catch pour savoir si le processus "ApplicationFrameHost" a été lancé et, si c'est le cas, récupérer son id (ok c'est pas terrible )

    Edit: Je corrige: ça fonctionne bien avec firefox, chrome ou opera mais pas avec Internet explorer (pareil qu'avec edge).

Discussions similaires

  1. [XL-MAC 2011] Creer une macro, créer un double sur le bureau/ copier/coller/reporter/déduire et supprimer
    Par Arnaud. dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 29/07/2014, 17h28
  2. Réponses: 0
    Dernier message: 31/03/2011, 13h37
  3. Créer une appli iphone qui pioche sur un SQL
    Par lacfab dans le forum Autres
    Réponses: 0
    Dernier message: 18/08/2010, 10h41
  4. [Linq to Sql] Passage d'une appli web utilisant Linq sur serveur
    Par cereal59 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 02/11/2008, 13h15
  5. comment connaitre la memoire utilisée par une appli?
    Par afrikha dans le forum Autres Logiciels
    Réponses: 11
    Dernier message: 19/11/2005, 21h24

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