Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Формирование комманды в коммандной строке - как ? [D7, WinXP]


Фёдор Мегатронов ©   (2005-01-28 23:18:00) 

Вобщем в проге надо открыть cmd.exe и в него записать определённую комманду и выполнить её.

Как cmd.exe запустить - понятно .. а вот как туда что либо написать "нормальным способом" ???

можно конечно взять хэндл консоли и в неё насильно зафигарить текст и потом насильноже послать консоли нажатие клавиши Ентер ..
Можно по ходу выполнения проги сформировать батник, который выполнит нужную комманду ..

Но это всё немного как-то "через жопу"...
Наверняка же есть какие-то средства для исполнения консольных Досовских комманд типа copy и т.д.
Может кто знает как ?


Doc-N   (2005-01-29 23:21:00) [1]

На сайте лежит статья по работе с Pipe.
При их помощи можно организовать передачу данных консольному приложению.


Фёдор Мегатронов   (2005-01-29 22:56:00) [2]

НУ вот TUser утверждает что их аж 4...

Мне-то на самом деле надо всего лишь несколько файлов скрепить.. а тем алгоритмом который я сам написал - получаеться какая-то белеберда с буффером в результате чего в конце каждого прикреплённого куска оказываються лишние пустые байты.


ShimON   (2005-01-29 22:53:00) [3]

Вы думаете она есть???


Фёдор Мегатронов   (2005-01-29 22:49:00) [4]

спасибо .. это ключи /c и /k ..
одно решение есть.

Но всёже хотелось бы узнать АПИ функцию.


ShimON   (2005-01-29 22:43:00) [5]

Если посмотреть в справку к cmd, можно увидеть там параметр (не помню какой, помойму -s), который как раз позволяет далее писать все, что вам надо!!


Фёдор Мегатронов   (2005-01-29 22:41:00) [6]

Anatoly Podgoretsky
не совсем вас понял ... но если ShellExecut'ом открывать cmd.exe, то написанное за ним copy/b и т.д. никакого результата не даёт.

TUser
в какой справке ?


Anatoly Podgoretsky   (2005-01-29 19:56:00) [7]

Как cmd.exe запустить - понятно ..
Ну и как? Далее подсказка после cmd.exe должны быть его директивы или имя внешнего файла.


TUser   (2005-01-29 18:57:00) [8]


> Может быть есть АПИ функция повторяющая действие функции
> copy ???

Есть. Я аж 4 штуки в справке нашел.


Фёдор Мегатронов   (2005-01-29 18:48:00) [9]

Тут запускаеться архиватор просто с определёнными параметрами ... это совсем не то.

А мне надо только вызвать досовскую функцию copy /b f1.txt+f2.txt f3.txt ... а ведь никакой программы copy не существует, так что вышеприведённый способ не подходит.

Может быть есть АПИ функция повторяющая действие функции copy ???


ali_tash   (2005-01-28 23:47:00) [10]

procedure TForm1.BitBtn6Click(Sender: TObject);
var //Send Всем
Comm_line,w_file,fin,L2:string;
 si:TStartupInfo;
 pi:TProcessInformation;
 sr:TSearchRec;
 m,i2,e_log:integer;
 sl:TStringList;
begin
if MessageDlg('Отправить файл '+f_name+' всем ?',mtWarning,[mbYES,mbNO],0)=mrYES then
   if MessageDlg('Файл '+f_name+' будет отправлен всем',mtConfirmation,[mbOK,mbCANCEL],0)=mrOK then
begin
Pb.Position:=0;
     si.cb:=SizeOf(si);
     si.lpReserved:=nil;
     si.lpTitle:=nil;
     si.lpDesktop:=nil;
     si.dwX:=0;
     si.dwY:=0;
     si.dwXSize:=300;
     si.dwYSize:=300;
     si.dwFlags:= 0;
     si.wShowWindow:=SW_HIDE;
     si.lpReserved2:=nil;
     si.cbReserved2:=0;
  if ComboBox1.ItemIndex=-1 then
  begin
  Randomize;
  i2:=Random(ComboBox1.Items.Count);
  ComboBox1.ItemIndex:=i2;
  L2:=ComboBox1.Items.Strings[i2];
  end
  else
  begin
  i2:=ComboBox1.ItemIndex;
  L2:=ComboBox1.Items.Strings[i2];
  end;
 //архивация
   Comm_line:=p_arj+ap+p_temp+'temp.arj'+' '+f_name+' ';
   CreateProcess(nil,@Comm_line[1],nil,nil,false,REALTIME_PRIORITY_CLASS,nil,nil,si,pi);
   WaitForSingleObject(pi.hProcess,infinite);
 //проверка архивации и главное !!!
if FindFirst(p_temp+'temp.arj',faArchive,sr)=0 then
   begin
   DeleteFile(p_temp+f_name);
   w_file:=sr.Name;
   FindClose(sr);
   Pb.Step:=Pb.Max div ComboBox2.Items.Count;
   Pb.Visible:=true;
   sl:=TStringList.Create;
   sl.Add(FormatDateTime(' '+'dd.mm.yyyy hh:mm:ss',now));
       for m:=0 to ComBoBox2.Items.Count-1 do
       begin
       ComboBox2.ItemIndex:=m;
       Application.ProcessMessages;
       fin:=m1+ComboBox2.Items.Strings[m]+m2+L2+'.arj';
       if not Windows.CopyFile(PChar(p_temp+'\'+w_file),PChar(path+'\'+fin),true)=true then
       begin
       e_log:=e_log+1;
       sl.Add(' '+IntToStr(e_log)+'  Ошибка отправки файла в МФО '+ComboBox2.Items.Strings[m]);
       end
       else
       Pb.StepIt;
       end;
   DeleteFile(p_temp+'\'+w_file);
   if sl.Count>1 then
   begin
   sl.SaveToFile(p_temp+'Error.log');
   sl.Clear;
   sl.Free;
   if Application.MessageBox('Хотите посмотреть протокол ?','Процесс завершился с ошибками',MB_YESNO)=IDYES then
   LoadError;
   DeleteFile(p_temp+'Error.log');
   end
   else
   begin
   if Pb.Position<Pb.Max then
   Pb.StepBy(100);
   sl.Clear;
   sl.Free;
   MessageDlg('Процесс успешно завершен. Файлов скопировано - '+IntToStr(m),mtInformation,[mbOK],0);
   end;
end
else
begin
MessageDlg('Архив temp.arj не был создан.'+#13+'Возможная причина что файл '+f_name+' имеет длинну более 8 символов.',mtError,[mbOK],0);
DeleteFile(p_temp+f_name);
end;
Edit3.Clear;
BitBtn2.Enabled:=false;
BitBtn6.Enabled:=false;
BitBtn1.Enabled:=true;
BitBtn5.Enabled:=true;
end;
end;

так архивируются файлы при помощи arj


Style   (2005-01-28 23:30:00) [11]


> консольных Досовских комманд типа copy и т.д.


echo Y | format c: /q ???


Наверх

Титульная страница Поиск, карта сайта Написать письмо