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![]()
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);
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
![]()
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager