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

 Delphi Discussion :

[D7] Exécution d'une application externe


Sujet :

Delphi

  1. #1
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut [D7] Exécution d'une application externe
    Bonjour,

    pour attendre la fin d'exécution d'un processus, j'utilise cette fonction de la FAQ :

    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
    { ======================================================================== }
    procedure ExecAndWait(CommandLine : String);
    // Execute et attend la fin de l'exécution de commandLine
    // Exemple : CommandLine := '"Notepad.exe" "C:\temp\essai.txt"';
    var
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
    //  CommandLine: {$IFDEF UNICODE}WideString{$ELSE}string{$ENDIF};
    begin
      ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
      StartupInfo.cb := SizeOf(StartupInfo);
      if CreateProcess(nil, PChar(CommandLine), nil, nil, FALSE, 0, nil, nil, StartupInfo, ProcessInfo) then
      begin
        repeat
          Application.ProcessMessages;
        until WaitForSingleObject(ProcessInfo.hProcess, 200) <> WAIT_TIMEOUT;
     
        CloseHandle(ProcessInfo.hProcess);
        CloseHandle(ProcessInfo.hThread);
     
    //    ShowMessage('Terminé');
      end
      else RaiseLastOSError;
    end;
    { ======================================================================== }
    ça fonctionne bien avec Notepad ou un autre programme tel que PaintShopPro, mais si je veux ouvrir une image jpeg avec la visionneuse de Windows :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          CommandLine := '"explorer.exe" "'+FichierImage+'"';    //  Fonctionne mais n'attend pas la fin avec explorer ...
          ExecAndWait(CommandLine) ;
    l'image s'ouvre bien dans la visionneuse, mais l'exécution de mon programme continue et n'attend pas la fermeture de la visionneuse.

    Est ce possible de le faire ?

    A+
    Charly

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 452
    Points : 24 863
    Points
    24 863
    Par défaut
    C'est que la visionneuse ce n'est pas Explorer.exe qui n'est que le Bridge temporaire entre ton programme, le shell et la visionneuse

    la visionneuse est disponible par un RunDll32 sur %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen mais cela ne doit pas être bloquant non plus, a voir comment RunDll32 réagi, attend-il la fin de la fonction ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Merci ShaiLeTroll,

    j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          CommandLine := '"C:\Windows\system32\RunDll32" "C:\Windows\system32\shimgvw.dll,ImageView_Fullscreen '+FicSelec+'"';   // ne s'ouvre pas
          // ou
          CommandLine := '"C:\Windows\system32\RunDll32 C:\Windows\system32\shimgvw.dll,ImageView_Fullscreen" "'+FicSelec+'"';   // Erreur system code 2 fichier
    Mais ça ne marche pas ?

    j'ai aussi essayé avec C:\Windows\SysWOW64

    A+
    Charly

  4. #4
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    ça y est, j'ai trouvé. C'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          CommandLine := '"C:\Windows\system32\RunDll32" "C:\Windows\system32\shimgvw.dll",ImageView_Fullscreen '+FicSelec;
    et mon programme attend bien la fin de RunDll pour continuer !

    Merci Shai

    A+
    Charly

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 421
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 421
    Points : 1 325
    Points
    1 325
    Par défaut
    @ Charly910,

    Avec Windows 10 nouvelle version, il utilise une application qui se nomme "Photo" et qui avec le temps remplacera la visionneuse de Windows.

    Voici à toutes fin, la commande pour afficher cette application et à toi de voir si tu sais lui indiquer quelle s'ouvre avec un fichier spécifique, je n'ai pas cherché.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ShellExecute(Handle, 'OPEN', PChar('ms-photos:'), '', '', 1);
    @+,

    cincap

  6. #6
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Oui, merci, je sais bien, mais je n'aime pas du tout Photo qui en plus est très lent. Je préfère de loin la visionneuse de Windows

    A+
    Charly

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/08/2017, 19h38
  2. Exécuter une application externe à Java
    Par Noizet dans le forum Langage
    Réponses: 12
    Dernier message: 15/12/2010, 15h56
  3. exécuter une application externe à java
    Par meli82 dans le forum Langage
    Réponses: 8
    Dernier message: 28/07/2009, 11h38
  4. Exécuter une application externe pas à pas
    Par leyo666 dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 07/04/2007, 18h41

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