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 :

Exécuter une commande DOS


Sujet :

Delphi

  1. #1
    Membre régulier Avatar de Bourak
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 231
    Points : 84
    Points
    84
    Par défaut Exécuter une commande DOS
    Salut les developpeurs

    Je voudrais executer une commande comme c'etait sous dos mais avec delphi. Y'a t'il une fonction special qui peut faire ça?

    Merci d'avance

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    ShellExecute ?

  3. #3
    Membre régulier Avatar de Bourak
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 231
    Points : 84
    Points
    84
    Par défaut
    Salut

    J'ai mal posé ma problème

    Le problème c'est d'executé une commande dos et non pas d'ouvrir le dos.
    D'autres part ,la commande que je voudrais l'executé et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    'Copy C:\print1.txt Lpt1'
    C'est à dire je veut envoyer le fichier text print1.txt vers mon imprimente connecté au port parallèle LPt1.

    J'espère que j'ai bien pricisé mon problème et merci d'avance!

  4. #4
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    bonjour,

    Regarde dans l'aide des API windows

    createprocess



    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
     
     
    function ExecuteCommande(Commande: String;Attente : Boolean = True): Boolean;
    Var
      lpsaProcess,
      lpsaThread    : PSecurityAttributes;
      StartupInfo   : TStartupInfo;
      ProcessInfo   : TProcessInformation;
      AddrCmd       : Array [0..255] Of Char;
      ExitCode      : DWord;
    begin
      FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
      with StartupInfo do
      begin
        cb          := SizeOf(TStartupInfo);
        dwFlags     := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
        wShowWindow := SW_HIDE;
      end;
     
      New(lpsaProcess);
      New(lpsaThread);
     
      lpsaProcess^.nLength              := SizeOf(lpsaProcess^);
      lpsaProcess^.lpSecurityDescriptor := Nil;
      lpsaProcess^.bInheritHandle       := True;
     
      lpsaThread^.nLength              := SizeOf(lpsaThread^);
      lpsaThread^.lpSecurityDescriptor := Nil;
      lpsaThread^.bInheritHandle       := True;
     
      StrPCopy(AddrCmd, Commande);
      Result := CreateProcess(nil, AddrCmd, lpsaProcess, lpsaThread, False,
                              STARTF_FORCEONFEEDBACK, nil, nil, StartupInfo, ProcessInfo);
      if not Result then Result:=(GetLastError>10000);
      Dispose(lpsaProcess);
      Dispose(lpsaThread);
      if Result then
      begin
        while Attente do
        begin
          // Solution d'attente 1
          Sleep(500);
          GetExitCodeProcess(ProcessInfo.hProcess, ExitCode);
          if ExitCode<>STILL_ACTIVE then break;
     
          // Solution d'attente 2
          // WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
     
        end;
        CloseHandle(ProcessInfo.hThread);
        CloseHandle(ProcessInfo.hProcess);
      end;
    end;
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  5. #5
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Et pourquoi pas mettre ta commande dans un fichier batch et l'exécuter avec ShellExecute.

    Mais, c'est peut-être trop simple ?

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    j'ajouterais ceci, pour lancer une commande Dos, tu dois lancer
    cmd.exe /c "commande dos"
    donc avec le code de Yurck voici comment appeler ta commande dos:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    function BuildDosCommandStr(Command:string):string;
    begin
        result:='cmd /c "'+Command+'"';
    end;
     
    procedure TForm1.Button8Click(Sender: TObject);
    begin
        ExecuteCommande(BuildDosCommandStr('Copy C:\print1.txt Lpt1'),TRUE);
    end;
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  7. #7
    Membre régulier Avatar de Bourak
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 231
    Points : 84
    Points
    84
    Par défaut
    Merci à tous

    Je vais les tester

    A bientot


    Merci

  8. #8
    Membre régulier Avatar de Bourak
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 231
    Points : 84
    Points
    84
    Par défaut
    Salut les developpeurs

    Presque ç que j'ai voulu ;

    Elle marche bien ,

    Merci à tous et merci pour les gens qui m'ont aider

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 27
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par defluc Voir le message
    Bonjour,
    Et pourquoi pas mettre ta commande dans un fichier batch et l'exécuter avec ShellExecute.

    Mais, c'est peut-être trop simple ?
    Salut,
    J'ai beaucoup lu des articles sur la création de ces types de fichiers mais je ne comprend toujours pas. Alors, aidez-moi donc à créer ces types de fichiers avec des instructions un peu plus complexes telles que:
    1- Utiliser la commande DISKPART
    2- Formater un lecteur amovible (flash)
    3- En gros, utiliser les commandes les plus usuelles de l'invite de commande de windows

    Merci, je compte sur vous.

  10. #10
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Citation Envoyé par masala Voir le message
    Merci, je compte sur vous.
    Et bien n'y compte pas trop !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/02/2007, 12h51
  2. [PowerBuilder] Executer une commande DOS sous PB
    Par Deedoo2000 dans le forum Powerbuilder
    Réponses: 3
    Dernier message: 09/08/2006, 15h54
  3. [API][Système] Executer une commande dos avec arguments
    Par oOoOuuhmAn dans le forum Général Java
    Réponses: 4
    Dernier message: 17/03/2006, 12h37
  4. executer une commande dos a partir d'une page WEB
    Par wagga84 dans le forum Langage
    Réponses: 1
    Dernier message: 15/03/2006, 11h09
  5. [Debutant(e)][Système]Executer une commande DOS
    Par iceman dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 18/05/2004, 14h30

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