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 :

Soucis pour récupérer une fenêtre


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut Soucis pour récupérer une fenêtre
    Bonjour,
    j'ai développé une petite application qui permet d'afficher un exe dans le panel de ma Form, j'ai lancé le processus avec process.start et puis je peux récupérer le handle de l'application avec Findwindow et l'intégrer dans le panel avec le setParent.
    Tout parait bon, mais mon problème est que le process.start prend un peu de temps pour lancer le processus, donc le Findwindow lorsqu'elle cherche les handles affichés elle ne peut pas récuperer le handle de mon exe car il n'est pas encore affiché
    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    processStartInfo = new System.Diagnostics.ProcessStartInfo();
    newProcess = new System.Diagnostics.Process();
     processStartInfo.FileName = "MyApp.exe";
     
    try
     {
     // Start the process
     newProcess = System.Diagnostics.Process.Start(processStartInfo);
     
     // Wait for process to be created and enter idle condition
     newProcess.WaitForInputIdle();
     ////// Get the main handle
     //appWin = newProcess.MainWindowHandle;
     }
     catch (Exception ^ex)
     {
    .....
     
     }
     existNewProcess = true;
     
     
    //System.Threading.Thread.Sleep(2000);
     IntPtr handle = FindWindow(null,"MyApp");
     
     // Put it into this form
     SetParent(handle, this.panel_VA.Handle);
     const int WM_SYSCOMMAND = 274;
    const int SC_MAXIMIZE = 61488;
     SendMessage(handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
    Le System.Threading.Thread.Sleep(2000); n'est pas valable car je sais pas combien faut t-il attendre
    Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    simple, tu fais du polling

    Tant que t'as pas trouvé ton handle de fenêtre, tu continues à essayer de le récupérer...

    Comme cela, t'auras pas à attendre un temps prédéterminé !!!

  3. #3
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut
    Bonjour,
    Merci pour l'idée, j'ai déjà essayé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IntPtr handle = FindWindow(null,"MyApp");
      while (Equals(nullptr,handle))
      handle = FindWindow(null,"MyApp");
    mais ça n'a pas marché

  4. #4
    Membre actif
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 71
    Par défaut
    salut,

    Et en utilisant la propriété Responding de ton Process pour faire la boucle d'attente ?

  5. #5
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut
    Bonjour,
    ni pour Responding
    ni pour IsWindowVisible

    Merci

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    pourquoi faire un FindWindow alors que tu lances toi même le process ?

    Le code suivant fonctionne bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    exe = Process.Start(@"notepad.exe");
                exe.WaitForInputIdle();
                IntPtr handle = exe.MainWindowHandle;
     
                SendMessage(handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/08/2006, 20h39
  2. Réponses: 11
    Dernier message: 13/07/2006, 16h15
  3. Réponses: 2
    Dernier message: 14/04/2006, 18h40
  4. Réponses: 5
    Dernier message: 09/09/2005, 17h51
  5. problème pour récupérer une valeur dans ma bd (débutante)
    Par auryn111 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/08/2005, 17h49

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