Programme DOS et Delphi

cs_manu00 Messages postés 93 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 25 octobre 2006 - 5 févr. 2004 à 22:00
Artegon Messages postés 13 Date d'inscription samedi 31 juillet 2004 Statut Membre Dernière intervention 11 août 2004 - 5 août 2004 à 16:02
Bonjour,
J'ai une super colle pour vous... :-)

j'aurais besoin d'un petit coup de main pour faire 2 choses:

-D'abord pour pouvoir recuperer le resultat d'un programme DOS dans un programme Delphi...
exemple:

================================
C:\> bonjour.exe
"Bonjour, vous venez de lancer le programme"
================================
Et je voudrais récuperer dans mon soft delphi la chaine => "Bonjour, vous venez de lancer le programme"

Savez vous comment faire ?

-Ensuite comme c'est pas tres propre un programme comme ca... j'aimerai trouver une solution pour que ce programme DOS soit fondu dans mon soft delphi... C'est a dire, que l'utilisateur ne puisse pas se douter de sa présence... Bon je ne sais pas si c'est faisable, mais y'a peut etre un moyen de le mettre quand meme dans mon soft delphi et de l'extracter dans un repertoire temporaire en vue de l'utiliser...
Enfin, la c'est encore flou...

Merci pour votre aide précieuse !!!

Manu

4 réponses

cs_manu00 Messages postés 93 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 25 octobre 2006
5 févr. 2004 à 22:57
Bon, pour la premiere etape, c'est OK, j'ai trouvé ce code la:
====================
procedure TForm1.Button1Click(Sender: TObject);
procedure RunDosInMemo(DosApp:String;Aedit:TEdit) ;
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) ;
AEdit.Text := AEdit.text + String(Buffer) ;
until (BytesRead < ReadBuffer) ;
end;
FreeMem(Buffer) ;
CloseHandle(ProcessInfo.hProcess) ;
CloseHandle(ProcessInfo.hThread) ;
CloseHandle(ReadPipe) ;
CloseHandle(WritePipe) ;
end;
end;

begin {button 1 code}
edit1.Clear;
RunDosInMemo('prog.exe',Edit1) ;
end;
==============

Je le met , ca pourra servir pour ceux qui chercheront ca comme moi...

Alors par contre, je reste sur ma deuxieme question..Comment dissimuler ce programme DOS dans mon soft (ou GUI, appelez ca comme vous voulez)

Any solution ?

Merci

M.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
6 févr. 2004 à 19:48
Pour le source donné ci-dessus, la page de l'excellent site web était surement :
http://delphi.about.com/bltip0201.htm
Je me trompe ?

En tous cas, il ne fait apparaitre aucune fenêtre DOS. Ce qui répondrait à la deuxième question.
May Delphi be with you
0
cs_manu00 Messages postés 93 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 25 octobre 2006
6 févr. 2004 à 20:24
Oui, c'est bien la que je l'ai trouvé...
Mais ca ne repond pas a ma question...
En fait, comme j'utilise un programme dos en + de mon soft delphi, ca me fait 2 programme (un peu pas propre)

Et donc, moi ce que je veux faire, c'est fondre ce programme dos a l'interieur de mon soft en delphi pour qu'il s'execute de la meme façon mais si possible sans se mettre sur le disque dur...mais si je fais de la science fiction la, je pense aussi a trouver un soft pour merger les 2 softs et qu'ils se decompresse dans un rep temporaire

Merci

M.
0
Artegon Messages postés 13 Date d'inscription samedi 31 juillet 2004 Statut Membre Dernière intervention 11 août 2004
5 août 2004 à 16:02
j' ai peu etre une solution pour toi...
Le decompressement temporaire ( dossier temp de windows ) est la solution la plus simple a mon avis...

JE NE SUIS PAS SURE DE L4 ORTHOGRAPHE DES VARIABLE, ...

if (IOresult>0) then
do
...
else
AssignFile(F,tempdir+'xxx.bat');
Rewrite(F);
Writeln(F,'...');
end;

Voila, IOresult indique si le programe existe ou pas...
Si il existe, tu l' appele ( Shekkexecute, ou autyre )
Si il n' existe pas, tu le cree, et ensuite tu l' appele...

Apres, reste a trouver un cmd qui efface le dossier temp si tu ne veux pas laisser de trace de ton fichier bat

J' espere que ce que j' ai dit est correcte :) et que cela t' a aider ou mis sur la voie ...

Artegon
0
Rejoignez-nous