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

Langage Delphi Discussion :

Pb de paramétrage d'un CreateProcess()


Sujet :

Langage Delphi

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 536
    Points : 121
    Points
    121
    Par défaut Pb de paramétrage d'un CreateProcess()
    Bonjour à tous

    Ce code de CreateProcess() n'attend pas la fin du processus fils pour continuer. Même avec le flag CREATE_SUSPENDED. Comment initialiser celui-ci ?

    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
     
      FillChar(Startupinfo,Sizeof(TStartupinfo),0);
      Startupinfo.cb:=Sizeof(TStartupInfo);
      StartupInfo.wShowWindow := SW_SHOWMAXIMIZED;
      StartupInfo.dwFlags := {STARTF_USESHOWWINDOW OR} CREATE_SUSPENDED;  // N'attend qd-même pas ! 
     
     
     
      Processus := 'NOTEPAD'; 
      Parametre := ''; 
     
      Retour := CreateProcess(nil,
                             nil; // PChar(Parametre),
      	 	         nil,
                             nil,
                             false,
                             normal_priority_class,
                             nil,
                             PChar(Rep),
                             Startupinfo,ProcessInfo);
     
     
      CASE Retour OF
          True :
              begin
     
    //etc.
    Y a-t-il moyen d'éviter cette API, avec Delphi ? Appeler un prog ET attendre qu'il rende la main ?

    Merci :hello:

  2. #2
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 536
    Points : 121
    Points
    121
    Par défaut
    Bon sang !

    On ne vous a jamais dit que vous avez du génie, sur ce forum ?

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 536
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par guillemouze Voir le message
    C'est bizarre... Delphi me refuse les paramètres si je les utilise en variables :



    Pourquoi ?

  5. #5
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    peut être parce que c'est le mauvais ordre des paramètres, le 3ème est du type "LPSECURITY_ATTRIBUTES". Ne serait-ce pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CreateProcess('"Notepad.exe"', '"c:\test.txt"', Nil, ...)
    plutot que 
    CreateProcess(Nil, '"Notepad.exe"', '"c:\test.txt"', ...)
    C'est quoi le message du compilateur ?

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 536
    Points : 121
    Points
    121
    Par défaut
    C'est bon

    Mon code (provisoire) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      StartInfo.wShowWindow := SW_SHOWMAXIMIZED;
      FillChar(StartInfo,SizeOf(StartInfo),#0);
      StartInfo.cb     := SizeOf(StartInfo);
     
      Application.Minimize;
     
      { Lancement de la ligne de commande }
      If CreateProcess(Nil,'"c:\Program Files (x86)\IDM Computer Solutions\UltraEdit-32\UEDIT32.EXE" "Z-Net.TXT"'
                       , Nil, Nil, False, 0, Nil, Nil, StartInfo, ProcessInfo) then
    ... sauf que l'éditeur n'est pas paramétré SW_SHOWMAXIMIZED . Mais je vais y arriver. L'essentiel est de pouvoir utiliser des variable

  7. #7
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 536
    Points : 121
    Points
    121
    Par défaut
    Voici le code qui fonctionne, et stoppe bien mon appli en attendant le retour du processus appelé :

    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
     
    Procedure Appel_6;
    Var  StartInfo   : TStartupInfo;
         ProcessInfo : TProcessInformation;
         Fin         : Boolean;
         Ligne_Cmd : string;
     
    begin
     
      FillChar(StartInfo,SizeOf(StartInfo),#0);
      StartInfo.cb     := SizeOf(StartInfo);
     
      Form1.Visible := False;
     
      Ligne_Cmd := PCHar(Nom_Editeur)  + ' ' + PChar(F_Cible);
     
      If CreateProcess(Nil, PChar(Ligne_Cmd)
                       , Nil, Nil, False, 0, Nil, Nil, StartInfo, ProcessInfo) then
     
      Begin
          Fin := False;
     
          Repeat
            Case WaitForSingleObject(ProcessInfo.hProcess, 200)Of
              WAIT_OBJECT_0 :  Fin := True; { L'application est terminée, on sort }
              WAIT_TIMEOUT  :  ;            { elle n'est pas terminée, on continue d'attendre }
            End;
     
            Application.ProcessMessages;
          Until Fin;
        End
      Else
          begin
              RaiseLastOSError;
              Form1.Visible := True;
              Application.ShowMainForm := True;
          end;
     
      Form1.Visible := True;
      SetForegroundWindow(Handle_App);
     
    End;
    Seul pépin : le prog appelé (UltraEdit32) n'apparaît pas en SHOW_MAXIMIZED. Après la routine, qui doit "déconfigurer" StartupInfo, UltraEdit apparaît systématiquement en mode "Non maximized" qd je l'appelle.

    Plus que ce détail à revoir. Merci pour el coup de main :hello:

  8. #8
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 844
    Points : 11 274
    Points
    11 274
    Billets dans le blog
    6
    Par défaut
    essaye en positionnant STARTF_USESHOWWINDOW dans TStartupInfo.dwFlags et SW_MAXIMIZE dans TStartupInfo.wShowWindow
    Delphi 5 Pro - Delphi 10.4 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

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

Discussions similaires

  1. CreateProcess (impossible de gérer le symbole >
    Par borgirz dans le forum Windows
    Réponses: 4
    Dernier message: 03/06/2004, 11h53
  2. [CreateProcess] Comment cacher la fenêtre ?
    Par iubito dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 27/04/2004, 19h27
  3. Réponses: 2
    Dernier message: 06/04/2004, 00h06
  4. CreateProcess + paramètres passé
    Par obione dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 20/03/2003, 18h25
  5. Paramétrage du DBEXTRACT
    Par mikouts dans le forum XMLRAD
    Réponses: 7
    Dernier message: 23/01/2003, 15h49

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