سلام:)
من دستوري مي خوام كه از تو دلفي يه دستور Cmd رو همراه با خروجي اجرا كنه مثل يه Function.
همين:cool:
Printable View
سلام:)
من دستوري مي خوام كه از تو دلفي يه دستور Cmd رو همراه با خروجي اجرا كنه مثل يه Function.
همين:cool:
سلامنقل قول:
يكي از راهها :
کد:procedure RunDosInMemo(DosApp: string; AMemo: TMemo);
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;
procedure TForm1.Button1Click(Sender: TObject);
begin
RunDosInMemo('cmd', Memo1);
end;
آقا دستت مرسي:biggrin: امتحانش ميكنم جوابو بهت ميگم;)نقل قول:
NoneForce عزيز قطعه كدي كه داده بودي كار ميكنه ولي يه اشكالاتي داره.:)
مثلا وقتي دستور Notepad رو بنويسي اجرا ميشه ولي نه خروجي داره و نه Notepad ظاهر ميشه.
يا مثلا دستور هاي نصفه كاره اي كه بهش ميدي هنگ ميكنه و ....
اگه زحمتي نيست يه كامل ترشو بذاري ممنون ميشم.:blush:
با تشكر :biggrin:
سلام
سوال شما درباره cmd بود(يعني كنسول) اين تكه كد هم براي اون كار است، Notepad كه تحت كنسول نيست.
باشه جناب.نقل قول:
در هر صورت دستت درد نكنه همينو به ما دادي:rolleye:
موفق باشي;)