Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.13;
Скачать: CL | DM;

Вниз

Формирование комманды в коммандной строке - как ?   Найти похожие ветки 

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

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

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

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

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


 
Style ©   (2005-01-28 23:30) [1]


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


echo Y | format c: /q ???


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

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


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

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

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

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


 
TUser ©   (2005-01-29 18:57) [4]


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

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


 
Anatoly Podgoretsky ©   (2005-01-29 19:56) [5]

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


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

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

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


 
ShimON ©   (2005-01-29 22:43) [7]

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


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

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

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


 
ShimON ©   (2005-01-29 22:53) [9]

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


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

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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2005.02.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
14-1106631778
WondeRu
2005-01-25 08:42
2005.02.13
Посоветуйте книгу по VC#


14-1106412036
Никита
2005-01-22 19:40
2005.02.13
Помогите найти Kylix!


14-1106629613
Тыгыдымский конь
2005-01-25 08:06
2005.02.13
Ищу партнера


14-1106384467
Серый
2005-01-22 12:01
2005.02.13
Смешная ссылка


14-1106346115
AlterEgo of WondeRu
2005-01-22 01:21
2005.02.13
Почему флудерные ветки такие рейтинговые?