سلام
چطور مي شه بعد از اينكه دستوري رو در خط فرمان استفاده كرديم(shell) جواب سيستم كه بايد در خط فرمان نمايش داده بشه به جاي نمايش در خط فرمان در برنامه خودمون مثلا در يك text چاپ كنيم؟
میتونید نتایجو بریزید توی یه فایل:
dir c:\windows > a.txt
شما باید از توابع api استفاده کنین ابتدا باید یک پروسه برای dos بوجود بیارین و با استفاده از createpipe و readpipe و witepipe اطلاعاتو بگیرین این پونیتیه که من تو دلفی واسه این کار نوشتم
کد:
unit dosoutput;
interface
uses
sysutils,windows,classes,forms;
procedure getDosoutput(DosApp:String;list:tstrings) ;
implementation
procedure getDosoutput(DosApp:String;list:tstrings) ;
var
Security : TSecurityAttributes;
ReadPipe,WritePipe : THandle;
start : TStartUpInfo;
ProcessInfo : TProcessInformation;
Buffer : Pchar;
BytesRead : DWord;
Apprunning : DWord;
begin
Security.nlength := SizeOf(TSecurityAttributes) ;
Security.binherithandle := true;
Security.lpsecuritydescriptor := nil;
if Createpipe (ReadPipe, WritePipe, @Security, 0) then begin
Buffer := AllocMem(2049) ;
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],2048,BytesRead,nil) ;
OemToAnsi(Buffer,Buffer) ;
list.Add(String(Buffer)) ;
until (BytesRead <2048) ;
end;
FreeMem(Buffer) ;
CloseHandle(ProcessInfo.hProcess) ;
CloseHandle(ProcessInfo.hThread) ;
CloseHandle(ReadPipe) ;
CloseHandle(WritePipe) ;
end;
end;
end.
ممنون. ولي كسي سورس VB رو نداره؟ من مي خوام مستقيم در برنامه نشون داده بشه.
(۰۲-مهر-۱۳۸۷, ۱۸:۴۹:۴۹)unknown_hcr نوشته است: [ -> ]ممنون. ولي كسي سورس VB رو نداره؟ من مي خوام مستقيم در برنامه نشون داده بشه.
با این جواب چه مشکلی داری؟
نقل قول: میتونید نتایجو بریزید توی یه فایل:
dir c:\windows > a.txt
یه richtextbox بزار رو فرمت خاصیت فیل نیمش رو بده a.txt حالا نتویجشو میتونی ببینی(لقمه که نباید جویده باشه)