|
Тема
|
Dos comandi w Memo pole
|
|
Автор | Student (Нерегистриран) |
Публикувано | 25.09.02 09:20 |
|
Imam edim malko stanen wupros :
Kak moga izwurshwam wsichki komandi ot Doc Konzolata samo che w memo pole?
t.e. kato napisha Dir ... ili Copy ... w moeto memo pole i natisna enter da stawa sushtoto kakto w Dos Konzolata.
Blagodarq predwarotelno!
| |
Тема
|
Re: Dos comandi w Memo pole
[re: Student]
|
|
Автор |
Demo (malko razbira..) |
Публикувано | 25.09.02 13:53 |
|
Tuka maj shte ti trqbva asembler
Borland e badeshteto a Delphi nastoyashteto!
| |
Тема
|
Re: Dos comandi w Memo pole
[re: Demo]
|
|
Автор |
PhantomAS (стар ерген®) |
Публикувано | 25.09.02 15:16 |
|
Ти пък се изказа ;-)
Да си чувал за пренасочване на стандартния вход/изход ???
Бях правил такова нещо - точно на Делфи - ще го потърся - и ще го постна - проблема е че новия ред от конзолата не се появява докато не се появи CR/LF - май - имаше някакъв недостатък до колкото си спомням
---
Е т'ва е живот!
| |
Тема
|
Re: Dos comandi w Memo pole
[re: PhantomAS]
|
|
Автор | Student (Нерегистриран) |
Публикувано | 26.09.02 09:31 |
|
Ne ne sum chuwal no shtom za towa stawa wupros moje da se porazrowq malko. 10x Predwaritelno
| |
Тема
|
Re: Dos comandi w Memo pole
[re: Student]
|
|
Автор |
LongJohn (Delphi фен) |
Публикувано | 26.09.02 10:29 |
|
hmmm, eto tuk neshto , deto moje da ti svarshi rabota.
bqh popadal na neshto predi i go prigodih za moite nuzdi.
svarshi rabota. e verno che e malko izmisleno , no vse pak raboti.
shte se radvam da vidq po-hitar nachin.
const
CmdFilename = 'cmdline.bat';
var
cmdfile : textfile;
//***************************************
// Запис на ДОС-командата в .BAT file
//
procedure FillCmd(CmdLine: string);
begin
Rewrite(cmdfile);
Writeln(cmdfile, cmdline);
CloseFile(cmdfile);
end;
//********************************************************
// Основна функция
//
procedure ConsoleCmd(CmdLine:String; OutMemo:TMemo);
const
BUFSIZE = 2000;
var
SecAttr : TSecurityAttributes; // uses Windows
hReadPipe,
hWritePipe : THandle;
StartupInfo: TStartUpInfo;
ProcessInfo: TProcessInformation;
Buffer : Pchar;
WaitReason,
BytesRead : DWord;
begin
FillCmd(CmdLine);
with SecAttr do
begin
nlength := SizeOf(TSecurityAttributes);
bInheritHandle := true;
lpSecurityDescriptor := nil;
end;
if CreatePipe (hReadPipe, hWritePipe, @SecAttr, 0) then
begin
Buffer := AllocMem(BUFSIZE + 1);
FillChar(StartupInfo, Sizeof(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.hStdOutput := hWritePipe;
StartupInfo.hStdInput := hReadPipe;
StartupInfo.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := SW_HIDE;
if CreateProcess(nil,
PChar(CmdFilename),
@SecAttr,
@SecAttr,
true,
NORMAL_PRIORITY_CLASS,
nil,
nil,
StartupInfo,
ProcessInfo) then
begin
//
repeat
WaitReason := WaitForSingleObject( ProcessInfo.hProcess,100);
Application.ProcessMessages;
until (WaitReason <> WAIT_TIMEOUT);
//
Repeat
BytesRead := 0;
ReadFile(hReadPipe, Buffer[0], BUFSIZE, BytesRead, nil);
// Терминиране на стринга:
Buffer[BytesRead]:= #0;
OemToAnsi(Buffer,Buffer);
// Показва се изхода
OutMemo.Text := OutMemo.text + String(Buffer);
until (BytesRead < BUFSIZE);
end;
FreeMem(Buffer);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
CloseHandle(hReadPipe);
CloseHandle(hWritePipe);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ConsoleCmd('dir', Memo1); // тест за dir командата
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
AssignFile(cmdfile, CmdFilename);
end;
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
var
line : string;
row : integer;
begin
if not (Key = #13) then
Exit;
row := Memo1.CaretPos.Y;
line := Memo1.Lines.Strings[row];
if line < #32 then Exit; // Избягване на контролните ESC-последователности
if CompareText(line,'cls') = 0 then // Малко измислено , но .... засега е така
Memo1.Clear
else
ConsoleCmd(line, Memo1);
Memo1.SelStart := Length(Memo1.Text);
end;
Щом не върви от първия път, значи има шанс Редактирано от LongJohn на 26.09.02 10:34.
| |
Тема
|
Re: Dos comandi w Memo pole
[re: LongJohn]
|
|
Автор | Student (Нерегистриран) |
Публикувано | 26.09.02 12:27 |
|
10x towa shte mi swurshi rabota idealno wupreki che ne iskah da se izpulnqwa ot wunshen file ama i towa stawa naistina e dosta hitro izmisleno i mislq da mu naprawq malko modifikacii ako Nqmash nishto protiw.
| |
Тема
|
Re: Dos comandi w Memo pole
[re: Student]
|
|
Автор |
LongJohn (Delphi фен) |
Публикувано | 26.09.02 13:01 |
|
Прати насам ако има подобрения
Щом не върви от първия път, значи има шанс
| |
|
моето е почти същото - ама можеш да направиш едно съществено подобрение - да преместиш цикъла който чете от sdtout - а в цикъла в който чакаш да привърши изпълнението на таск-а. Доста ефектно е за процеси които отнемат много време и дисплейват информация - така не се чака да свърши процеса - ами още по времето на изписването на всеки ред на "екрана" - данните се появяват в Memo- то ;-))))
Това реално беше моята реализация ;-)
---
Е т'ва е живот!
| |
Тема
|
Re: Dos comandi w Memo pole
[re: PhantomAS]
|
|
Автор |
SDR (TaskMaster) |
Публикувано | 03.10.02 16:10 |
|
------------------------
C:\>cmd /?
CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] string]
/C Carries out the command specified by string and then terminates
-------------------------------------------------
sled towa
-------------------------------------------------
C:\>set
.......
ComSpec=C:\WINNT\system32\cmd.exe
..........
-------------------------------------------------
i nakraq
-------------------------------------------------
GetEnvironmentVariable(Name: string): string;
-------------------------------------------------
funkciqta za startirane na proces e po izbor
------------------------------
I got a COMPILER, and I'm not afraid to use it!
| |
|
|
|
|