Bonjour
Je lance en ShellExecute un exe par "cmd"
Il me renvoie dans cette fenetre DOS plusieurs informations que j'ai besoin de connaitre.
Comment récupérer ses informations de cette fenêtre ?
Merci
Bonjour
Je lance en ShellExecute un exe par "cmd"
Il me renvoie dans cette fenetre DOS plusieurs informations que j'ai besoin de connaitre.
Comment récupérer ses informations de cette fenêtre ?
Merci
Salut
Inspire toi de ce thread http://www.developpez.net/forums/sho...edirection+DOS : il y a un code qui permet de rediriger la sortie DOS vers un TMemo. Il ne te reste plus qu'à récupérer son contenu![]()
Pedro
Aucune réponse aux sollicitations techniques par MP
Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)
Les pages Source C'est bon. Mangez-en!
Le défi Delphi
Règles du forum - FAQ Delphi - Pensez au chtit
Aéroclub Bastia Saint-Exupéry
Je n'y arrive pas ... (exemple pour ipconfig)
voila mon code
Le résultat est dans txt
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 procedure TFormSW.BitBtn1Click(Sender: TObject); var PipeIn :THandle; PipeOut :THandle; StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; Buffer: array[0..4096] of Char; NbRead: DWord; cmd:string; txt:TStrings; begin with BDDModule do begin // Créer un pipe d'entrées/sorties CreatePipe(PipeIn,PipeOut,nil,0); // Créer le process en redirigeant les E/S FillChar(StartupInfo, SizeOf(TStartupInfo),0); StartupInfo.cb :=SizeOf(TStartupInfo); StartupInfo.dwFlags :=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; StartupInfo.wShowWindow:=SW_HIDE; StartupInfo.hStdInput :=PipeIn; StartupInfo.hStdOutput :=PipeOut; StartupInfo.hStdError :=PipeOut; CreateProcess(nil,PChar('cmd'),nil,nil,True,0,nil,'c:\',StartupInfo,ProcessInfo); // attendre la fin du process WaitForSingleObject(ProcessInfo.hProcess,INFINITE); Sleep(100); SendKeys('ipconfig'); SimulateKeystroke(VK_RETURN, 0); Sleep(10); //petit temps d'attente // Fermer la sortie CloseHandle(PipeOut); //Sleep(500); // Laisse le temps au process en cours de suppression de s'arrêter // pour relire le tout while ReadFile(PipeIn,Buffer,4096,NbRead,nil) do txt.Add(Buffer); // fin CloseHandle(PipeIn); end; end;
J'essaye de l'afficher mais aucune réponse
[Balises CODE rajoutées par Pedro. Merci d'y penser à l'avenir]
Non, ce n'est pas comme ça qu'il faut s'y prendre.
La variable TStrings sert uniquement à utiliser un compo graphique pour afficher
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 while ReadFile(PipeIn,Buffer,4096,NbRead,nil) do Memo1.Lines.Add(Buffer);
Pedro
Aucune réponse aux sollicitations techniques par MP
Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)
Les pages Source C'est bon. Mangez-en!
Le défi Delphi
Règles du forum - FAQ Delphi - Pensez au chtit
Aéroclub Bastia Saint-Exupéry
Désolé je débute un peu
Pour affihcer le contenu du mémo je fais quoi ?
Ben normalement, si tu fais ce que je t'ai dit, ça s'affiche tout seulEnvoyé par cat1982
![]()
Pedro
Aucune réponse aux sollicitations techniques par MP
Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)
Les pages Source C'est bon. Mangez-en!
Le défi Delphi
Règles du forum - FAQ Delphi - Pensez au chtit
Aéroclub Bastia Saint-Exupéry
bah voila mon code
j'ai enlever le wait car cela bug sinon, mais j'ai rien qui s'affiche
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 procedure TFormSW.BitBtn1Click(Sender: TObject); var PipeIn :THandle; PipeOut :THandle; StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; Buffer: array[0..4096] of Char; NbRead: DWord; cmd:string; txt:TStrings; Memo1 :TMemo; begin with BDDModule do begin // Créer un pipe d'entrées/sorties CreatePipe(PipeIn,PipeOut,nil,0); // Créer le process en redirigeant les E/S FillChar(StartupInfo, SizeOf(TStartupInfo),0); StartupInfo.cb :=SizeOf(TStartupInfo); StartupInfo.dwFlags :=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; StartupInfo.wShowWindow:=SW_SHOW; StartupInfo.hStdInput :=PipeIn; StartupInfo.hStdOutput :=PipeOut; StartupInfo.hStdError :=PipeOut; CreateProcess(nil,PChar('cmd'),nil,nil,True,0,nil,'c:\',StartupInfo,ProcessInfo); // attendre la fin du process //WaitForSingleObject(ProcessInfo.hProcess,INFINITE); Sleep(100); SendKeys('ipconfig'); SimulateKeystroke(VK_RETURN, 0); Sleep(10); //petit temps d'attente // Fermer la sortie CloseHandle(PipeOut); Sleep(500); // Laisse le temps au process en cours de suppression de s'arrêter // pour relire le tout while ReadFile(PipeIn,Buffer,4096,NbRead,nil) do Memo1.Lines.Add(Buffer); // fin CloseHandle(PipeIn); terminateProcess(ProcessInfo.hProcess,0); end; end;
recherche "rundosinmemo" sur google il y a un exemple je crois.
Pedro
Aucune réponse aux sollicitations techniques par MP
Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)
Les pages Source C'est bon. Mangez-en!
Le défi Delphi
Règles du forum - FAQ Delphi - Pensez au chtit
Aéroclub Bastia Saint-Exupéry
Partager