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

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

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 16:30 01.06.24 
Компютри и Интернет
   >> Delphi
Всички теми Следваща тема *Кратък преглед

Тема 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



Прати насам ако има подобрения

Щом не върви от първия път, значи има шанс


Тема Re: Dos comandi w Memo poleнови [re: LongJohn]  
Автор PhantomASМодератор (стар ерген®)
Публикувано26.09.02 18:10



моето е почти същото - ама можеш да направиш едно съществено подобрение - да преместиш цикъла който чете от 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!



Всички темиСледваща тема*Кратък преглед
Клуб :  


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

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