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

C# Discussion :

récuperer le Handle de l'application


Sujet :

C#

  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Par défaut récuperer le Handle de l'application
    Bonjour à tous

    J'ai un programme qui est censé connaître son propre Handle afin de se remettre en premier plan à certains moments. SetForegroundWindow et SwitchToThisWindow ne fonctionnent apparament pas à cause de ca. Le plus intrigant c'est ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    handle = Process.GetCurrentProcess().Handle;
    Console.Write(handle + " || " + Process.GetCurrentProcess().Handle.ToString());
    Voila le résultat :
    2436 || 2448

    Le handle change constamment... et le MainWindowHandle est toujours a 0. Mes recherches pour trouver le Handle de sa propre fenêtre sont infructueuses.

    Je ne suis pas un pro en ce qui concerne les Handle donc si quelqu'un à l’aimabilité de m'expliquer plus précisément comment cela fonctionne, cela me serait très utile !

    Merci d'avance !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 14
    Par défaut
    Bonjour,
    Je ne suis pas un pro dans les handle et j'ai moi même eut pas mal de soucis avec ceux-ci ces derniers jours, lors de mes recherches pour mettre un application au premier plan je suis comme toi tombé sur SetforegroundWindow, mais il celle-ci ne fonctionne pas correctement si ta fenêtre a été réduite dans la barre des taches, par contre j'ai réussi avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [DllImport("user32.dll", SetLastError = true)]
            static extern bool OpenIcon(IntPtr hwnd);
    .
    .
    .
    .
    bool result;
    result = OpenIcon(MonProcess.MainWindowHandle);
    result te renvoie true si la fenêtre à bien été remise au premier plan. Le seul problème (que je n'ai pas encore résolu) c'est que dans mon cas je dois géré un handle externe a l'application et que le Mainwindowtitle disparait après un certain nombre d'essai, ma fonction me renvoi donc true alors que rien en s'est produit.

    J'espère que cela t'aidera quand même.

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Par défaut
    Merci de ta réponse express.

    Je vais être plus explicite quant à la finalité de ce projet.
    Je cherche a faire un menu qui va permettre d'executer une application parmi plusieurs via la classe System.Diagnostics.Process.

    J'aimerais cependant, une fois que l'application ait été lancée, revenir sur mon Menu grâce a SetForegroundWindow ou autre fonction.

    L'application lancée n'est donc pas en barre des taches et est même au premier plan justement. Je lance donc un thread dans mon menu qui va lancer l'application et ensuite remettre mon menu au premier plan (ce n'est pas grave si il y a quelques frames durant lesquels l'application lancée est devant).

    Le lancement de l'application fonctionne parfaitement, mais pas la deuxieme partie.


    Autre chose inquiétante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Process[] processes = Process.GetProcesses();
    foreach (Process p in processes) {
        try {
             Console.Write(p.MainWindowHandle);
        } catch (System.Exception) {}
    }
    me retourne toujours 0 quelque soit le process...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 14
    Par défaut
    Tes processus utilisent-ils une Interfaces graphiques ? Car il me semble que MainWindowHandle réfère au Handle de la fenêtre principale de ton processus donc si pas d'interface graphique, pas de mainwindowhandle -> http://msdn.microsoft.com/fr-fr/libr...=vs.80%29.aspx

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Par défaut
    Je travaille avec Unity et ce sont des maquettes graphiques que je lance. L'application s'ouvre et même mon menu à son interface graphique d'ouverte.

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Par défaut
    J'ai tenté avec OpenIcon en ce qui concerne la deuxième partie (Launcher en mode fenetre et application cachée en plein écran) et le résultat est sans équivoque : Aucune réaction. Normalement, le launcher est censé relancer l'application en plein écran.

    Autant avec SetForegroundWindow(proc.Handle) il sélectionnait bien la fenêtre (sans la montrer mais elle était active)...

    Je commence a désespérer...

Discussions similaires

  1. Récuperer le handle d'une application
    Par multimania dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 18/01/2012, 11h07
  2. Réponses: 6
    Dernier message: 15/03/2006, 14h35
  3. Comment retrouver le handle d'une application console?
    Par Laurent Dardenne dans le forum Windows
    Réponses: 7
    Dernier message: 22/12/2004, 16h58
  4. Comment récuperer le handle d'un TPaintBox ?
    Par nicolos dans le forum C++Builder
    Réponses: 1
    Dernier message: 05/11/2004, 08h58
  5. Comment récuperer le Handle du module courant ?
    Par gord's dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 28/06/2004, 15h26

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