Текущий архив: 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.043 c