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

Windows Forms Discussion :

Problème pendant l'encrage d'une application dans une winform


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Homme Profil pro
    Alternant
    Inscrit en
    Octobre 2019
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 48
    Points : 66
    Points
    66
    Par défaut Problème pendant l'encrage d'une application dans une winform
    Bonjour,

    J'éssaye depuis plusieurs semaines d'encrer une application dans une winform cependant mon programme me lance l'erreur suivante :

    Les informations demandées ne sont plus disponibles, car le processus n'est plus exécuté.
    L'application sur laquelle j'effectue mon test est Mozilla Firefox donc pour résumé l'application lance bien Firefox mais ne peut pas l'ancrer car c'est comme s'il ne le détectait pas alors que quand notepad se lance il est directement ancrer voici mon 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
            IntPtr appWin1;
            IntPtr appWin2;
            [DllImport("user32.dll", SetLastError = true)]
            private static extern long SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
     
            [DllImport("user32.dll", SetLastError = true)]
            private static extern long SetWindowPos(IntPtr hwnd, long hWndInsertAfter, long x, long y, long cx, long cy, long wFlags);
     
            [DllImport("user32.dll", SetLastError = true)]
            private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint);
     
     
            private void button1_Click(object sender, EventArgs e)
            {
     
                try
                {
                    ProcessStartInfo ps1 = new ProcessStartInfo("notepad.exe");
                    ps1.WindowStyle = ProcessWindowStyle.Minimized;
                    Process p1 = Process.Start(ps1);
                    Thread.Sleep(1000); // Allow the process to open it's window
                    appWin1 = p1.MainWindowHandle;
                    // Put it into this form
                    SetParent(appWin1, this.Handle);
                    // Move the window to overlay it on this window
                    MoveWindow(appWin1, 0, 0, this.Width / 2, this.Height, true);
     
     
     
                    ProcessStartInfo ps2 = new ProcessStartInfo(@"C:\Program Files\Mozilla Firefox\firefox.exe");
                    //ps2.WindowStyle = ProcessWindowStyle.Minimized;
                    Process p2 = Process.Start(ps2);
                    Thread.Sleep(1000); // Allow the process to open it's window
                    appWin2 = p2.MainWindowHandle;
                    // Put it into this form
                    SetParent(p2.MainWindowHandle, this.Handle);
                    MoveWindow(p2.MainWindowHandle, this.Width / 2, 0, this.Width / 2, this.Height, true);
     
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, ex.Message, "Error");
                }
            }
     
            private void Form1_Resize(object sender, EventArgs e)
            {
                if (this.appWin1 != IntPtr.Zero)
                {
                    MoveWindow(appWin1, 0, 0, this.Width / 2, this.Height, true);
                }
     
                if (this.appWin2 != IntPtr.Zero)
                {
                    MoveWindow(appWin2, this.Width / 2, 0, this.Width, this.Height, true);
                }
                //base.OnResize(e);
            }
    J'ai également essayer avec cette méthode mais j'ai le même problème
    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
    31
    32
    33
    34
                ProcessStartInfo info = new ProcessStartInfo();
                info.FileName = "firefox.exe";
                info.Arguments = "";
                info.UseShellExecute = true;
                info.CreateNoWindow = true;
                info.WindowStyle = ProcessWindowStyle.Maximized;
                info.RedirectStandardInput = false;
                info.RedirectStandardOutput = false;
                info.RedirectStandardError = false;
     
                System.Diagnostics.Process p = System.Diagnostics.Process.Start(info);
     
                p.WaitForInputIdle();
                Thread.Sleep(3000);
     
                Process[] p1;
                if (p.MainWindowHandle == null)
                {
                    List<String> arrString = new List<String>();
                    foreach (Process p2 in Process.GetProcesses())
                    {
                        // Console.WriteLine(p1.MainWindowHandle);
                        arrString.Add(Convert.ToString(p2.ProcessName));
                    }
                    p1 = Process.GetProcessesByName("Firefox");
                    //p.WaitForInputIdle();
                    Thread.Sleep(5000);
                    SetParent(p1[0].MainWindowHandle, tabControl1.TabPages[0].Handle);
     
                }
                else
                {
                    SetParent(p.MainWindowHandle, tabControl1.TabPages[0].Handle);
                }
    j'ai vu qu'il y avait sûrement la possibilité d'utiliser WH_SHELL mais je ne sais pas du tout comment l'utiliser

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 811
    Points : 5 618
    Points
    5 618
    Par défaut
    Je n'ai pas la solution a ton problème mais je peut être te donner un début de piste sur le pourquoi ça fonctionne avec Notepad et pas avec Firefox.

    Partons d'une situation simple où
    - Tu n'a pas Firefox d'ouvert
    - Tu n'a qu'un seul onglet qui est sensé s'ouvrir au démarrage de Firefox

    Et bien lorsque tu double cliques sur Firefox, il va se passer plusieurs choses.
    1. Tu un premier processus Firefox qui va se lancer
    2. Ce processus va en lancer un ou plusieurs autres avant de se fermer (tous nommés Firefox)
    3. Au final tu verras plusieurs processus Firefox dans le gestionnaire des tâches (5 sur ma machine) pour une instance de Firefox avec un seul onglet d'ouvert.

  3. #3
    Membre du Club
    Homme Profil pro
    Alternant
    Inscrit en
    Octobre 2019
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 48
    Points : 66
    Points
    66
    Par défaut
    Donc si je comprends bien la démarche l'idée c'est de permettre à mon application de détecter les instances de firefox pour les rediriger vers ma Winform et donc de permettre l'ancrage de celui-ci ?

  4. #4
    Membre du Club
    Homme Profil pro
    Alternant
    Inscrit en
    Octobre 2019
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 48
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par popo Voir le message
    Je n'ai pas la solution a ton problème mais je peut être te donner un début de piste sur le pourquoi ça fonctionne avec Notepad et pas avec Firefox.

    Partons d'une situation simple où
    - Tu n'a pas Firefox d'ouvert
    - Tu n'a qu'un seul onglet qui est sensé s'ouvrir au démarrage de Firefox

    Et bien lorsque tu double cliques sur Firefox, il va se passer plusieurs choses.
    1. Tu un premier processus Firefox qui va se lancer
    2. Ce processus va en lancer un ou plusieurs autres avant de se fermer (tous nommés Firefox)
    3. Au final tu verras plusieurs processus Firefox dans le gestionnaire des tâches (5 sur ma machine) pour une instance de Firefox avec un seul onglet d'ouvert.
    J'ai enfin réussi ! Merci pour ton aide t'as réflexion m'a permis de comprendre mon erreur, donc oui il fallait que je prenne en compte toute les instances du programme c'était pour ça que sa ne fonctionnait pas !

Discussions similaires

  1. Problème pendant l'installation d'une machine
    Par thanks27 dans le forum Windows
    Réponses: 7
    Dernier message: 05/11/2019, 16h19
  2. Réponses: 3
    Dernier message: 18/06/2013, 15h02
  3. [AC-2003] Problème d'importation d'un fichier Excel dans une application ACCES
    Par zahira87 dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/03/2013, 15h08
  4. Réponses: 2
    Dernier message: 24/09/2010, 10h17
  5. Réponses: 4
    Dernier message: 09/05/2007, 18h03

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