Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COMPOSANT CONSOLEIOHANDLER (ENVOYEZ UNE COMMANDE À UN EXECUTABLE "CONSOLE" WINDOWS OÙ DOS ET RECUPÉREZ LE RÉSULAT DANS UN TSTRINGS)


Information sur la source

Catégorie :Exécution Classé sous : consolewin32, getconsoleouput, consoledos Niveau : Initié Date de création : 03/04/2006 Date de mise à jour : 17/11/2006 12:22:44 Vu / téléchargé: 3 953 / 785

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Suite à une question du forum, j'ai créé ce petit composant qui permet l'envoie d'une commande à un executable de type "Console" Win32 où DOS et de pouvoir(c'est le but) recupéré la sortie dans un TStrings, certes il existe une méthode simple en recupérant la sortie depuis un fichier texte externe, néanmoins ce composant n'utilise pas cette technique et permet la récupération directement depuis le processus(Creation d'un PIPE)!!!
 

Source

  • une démo est comprise dans le zip
une démo est comprise dans le zip

Conclusion

c'est censé fonctionner sur toutes les plate-forme grâce à la duplication des processus néanmoins je n'ai pu testé que sur WindowsXP.
suite à une exception lorsque j'ai voulu compiler un code asm en utilisant TASM, il s'avère que si le programme n'est pas un Win32 en mode Console XP plante, car en effet TASM est en pure DOS bien qui fonctionne sous windows il ne possède pas de header 'PE/NT', problème regler !!! avec l'utilisation de la commande "cmd", une petite routine se charge de la vérification du programme cible(si Console Win32 où DOS)
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

05 avril 2006 11:43:59 :
Bug pour les programmes en pure DOS fixé(XP seulement) + quelques modifications
17 novembre 2006 12:22:44 :
Correction du bug de l'affichage de retour du TStrings + petite amélioration du fonctionnement du composant

Commentaires et avis

signaler à un administrateur
Commentaire de flo160fr le 11/04/2006 17:23:12

Ca serai bien de pouvoir utiliser la totalité des commandes dos avec ton prog... et pas juste ouvrir des applications consoles...

signaler à un administrateur
Commentaire de mounjetado le 16/11/2006 10:50:50

bonjour,
j'ai fait une appli console pour prendre des mesures, et je voudrais maintenant récupérer mes mesures en temps réel pour les traiter. aussi ton prog m'intéresse, et je viens de télécharger ton source mais depuis j'essaie désespérément de le faire fonctionner... ou bien j'ai de sérieuses lacunes, ou alors ça manque d'infos! pour ma part, je crois qu'il y a des deux. je suis autodidacte, donc j'ignore si mon appli est viable et je ne connais pas les commandes dos en utilisant des lignes de commande... aurais-tu un tuto sur ce sujet?
merci

signaler à un administrateur
Commentaire de jace1975 le 16/11/2006 23:36:16

salut,

Commentaire un peu en retard , mais comme j'ecrit un petit interpréteur de commande en ce moment je me suis intéressé à ton code. franchement je te conseille et à ceux aussi qui liront le message par la suite d'utiliser la fonction ci-dessous qui marche vraiment bien car la tienne connait quelque limite génante , genre les rapports de pings incomplets, etc ... :

  procedure RunDosInMemo(DosApp: string; AMemo: Trichedit);
  const
    ReadBuffer = 2400;
  var
    Security: TSecurityAttributes;
    ReadPipe, WritePipe: THandle;
    start: TStartUpInfo;
    ProcessInfo: TProcessInformation;
    Buffer: Pchar;
    BytesRead: DWord;
    Apprunning: DWord;
  begin
    with Security do begin
        nlength := SizeOf(TSecurityAttributes);
        binherithandle := true;
        lpsecuritydescriptor := nil;
      end;
    if Createpipe(ReadPipe, WritePipe,
      @Security, 0) then begin
        Buffer := AllocMem(ReadBuffer + 1);
        FillChar(Start, Sizeof(Start), #0);
        start.cb := SizeOf(start);
        start.hStdOutput := WritePipe;
        start.hStdInput := ReadPipe;
        start.dwFlags := STARTF_USESTDHANDLES +
          STARTF_USESHOWWINDOW;
        start.wShowWindow := SW_HIDE;

        if CreateProcess(nil,
          PChar(DosApp),
          @Security,
          @Security,
          true,
          NORMAL_PRIORITY_CLASS,
          nil,
          nil,
          start,
          ProcessInfo)
          then
          begin
            repeat
              Apprunning := WaitForSingleObject
                (ProcessInfo.hProcess, 100);
              Application.ProcessMessages;
            until (Apprunning <> WAIT_TIMEOUT);
            repeat
              BytesRead := 0;
              ReadFile(ReadPipe, Buffer[0],
                ReadBuffer, BytesRead, nil);
              Buffer[BytesRead] := #0;
              OemToAnsi(Buffer, Buffer);
              AMemo.Text := AMemo.text + string(Buffer);
            until (BytesRead < ReadBuffer);
          end;
        FreeMem(Buffer);
        CloseHandle(ProcessInfo.hProcess);
        CloseHandle(ProcessInfo.hThread);
        CloseHandle(ReadPipe);
        CloseHandle(WritePipe);
      end;
  end;

tschussss.....

signaler à un administrateur
Commentaire de shining le 17/11/2006 12:37:11


Tout d'abord bonjour à tous et désolé pour le retard, en ce moment j'ai très peu de temps devant moi pour faire des mises à jour rapidement !!,

flo160fr bonne idée mais ce n'est pas le but 1er de ce composant !!

mounjetado en principe avec cette mise à jour tu ne devrais pas trop avoir de problème il suffit de suivre l'exemple de la demo, sinon il faudrait un peu plus d'explication quant à la commande envoyé ainsi que le paramètre et programme, j'ai cru comprendre que tu avais developper ta propre Application console ?!?, dans ce cas il ne faut pas oublié que la sortie de la fenêtre console se gère avec la fonction WriteLn() voir l'aide de Delphi

jace1975 le problème de l'affichage est résolu

@+

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 4,040 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.