Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 02:33 19.05.24 
Клубове/ Компютри и Интернет / Delphi Всички теми Следваща тема Пълен преглед*
Информация за клуба
Тема 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.



Цялата тема
ТемаАвторПубликувано
* Dos comandi w Memo pole Student   25.09.02 09:20
. * Re: Dos comandi w Memo pole Demo   25.09.02 13:53
. * Re: Dos comandi w Memo pole PhantomAS   25.09.02 15:16
. * Re: Dos comandi w Memo pole Student   26.09.02 09:31
. * Re: Dos comandi w Memo pole LongJohn   26.09.02 10:29
. * Re: Dos comandi w Memo pole Student   26.09.02 12:27
. * Re: Dos comandi w Memo pole LongJohn   26.09.02 13:01
. * Re: Dos comandi w Memo pole PhantomAS   26.09.02 18:10
. * Re: Dos comandi w Memo pole SDR   03.10.02 16:10
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.