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

API, COM et SDKs Delphi Discussion :

Problème avec WinExec


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 109
    Par défaut Problème avec WinExec
    Bonjour,
    En fait j'ai un petit souci avec la commande winexec
    en fait j'ai une procedure qui me lance cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    begin
    fichiertemp := GetTempDirectory+'rc.txt';
       WinExec(
         PChar('COMMAND.COM /K ipconfig/all > '+fichiertemp),
          SW_HIDE
         );
    GetTempDirectory est une fonction qui me retourne le chemin du dossier temporaire. Donc je sauvegarde le fichier sous rc.txt et j'essaie de l'analyser avec ma procedure analyse
    C'est là que le bat blesse, je me rend compte que WinExec me génére un processus apelé ntvdm.exe et donc il ya un conflit de lecture/ecriture sur mon fichier
    Ma question est comment s'assuré de la fin de la ligne de commande WinExec?
    Merci bcp

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Par défaut
    bonjour,

    essayer ce 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
     
    function LanceAppliAttenteFin(NomFichier:string):boolean;
    {permet de lancer un exécutable. NomFichier est le nom avec chemin     }
    {de cet exécutable ou d'un raccourci qui pointe vers cet exécutable.   }
    { notre programme est arrété tant que l'exécutable n'est pas fini      }
    {tout est arrété on ne peut donc même plus déplacer sa fenêtre.        }
    { il est donc préférable de la rendre invisible avant le lancement     }
    {de cette fonction.                                                    }
    { LanceAppliAttenteFin renvoie true si le lancement s'est bien passé   }
    var
      StartInfo : TStartupInfo;
      ProcessInformation : TProcessInformation;
    begin
      result:=true;
      ZeroMemory(@StartInfo, sizeof(StartInfo)); // remplie de 0 StartInfo
      StartInfo.cb:=sizeof(StartInfo);
      if CreateProcess(nil,PChar(NomFichier),nil,nil,true,0,nil,nil,StartInfo,ProcessInformation)
      then WaitForSingleObject(ProcessInformation.hProcess, INFINITE)// attend que l'application désignée par le handle ProcessInformation.hProcess soit terminée
      else result:=false;
    end;
    Nota:
    Winexec est obsolète. il vaudrait mieux utiliser shellExecute.
    Si votre delphi est sufisament recent (a partir de delphi 5 ou 6 je crois) il existe une fonction IncludeTrailingPathDelimiter qui ajoute eventuellment un \ à la fin d'un repertoire. cela permettrait de securiser votre getTempdirectory si besoin est.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 109
    Par défaut
    Merci ca m'aide beaucoup,
    par contre j'aurais souhaité en fait souhaité avoir la meme commande que dans mon exec mais je ne peux pas faire ca avec un fichier executable?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Par défaut
    Pas a ma conaissance.
    Ceci dis, dans de telle cas j'utilise la manière la plus basic. Je cré un fichier .bat et je le deroule. Par conséquence je ne connait pas les subtilités de ce genre de tache.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 109
    Par défaut
    C'est exactement ce que j'ai fais mais si je fais la fine bouche pendant une fraction de seconde on vois une fenetre dos et j'aurais souhaité la masquée
    En tout cas merci bcp tu m'as bien avancé

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

Discussions similaires

  1. problème lancement executable avec winexec()
    Par semenzato dans le forum MFC
    Réponses: 5
    Dernier message: 19/01/2004, 11h48
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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