Имеем батник send.bat следующего содержания:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 | @echo off
IF /% 1 ==/ GOTO ERR
f:
cd public
send /a=a
send "hello % 1 !" to user1
send "hello % 1 !" to user2
send "hello % 1 !" to user3
exit
:ERR
echo No parameter!
exit
|
где %1 это числовой параметр который указывается при запуске батника из командной строки (пример "C:\>send.bat 01"), результат выполнения батника это отправка сообщения hello с номером %1.
Пробую через WinExec
Код:
1 2 3 4 5 6 7 8 9 10 | procedure TForm1 . Button1Click(Sender: TObject);
begin
bb:=ComboBox2 . Text;
if bb= '' then
begin
MessageBox(Application . Handle, 'укажите номер' , 'error' , MB_OK +MB_ICONEXCLAMATION);
end else
WinExec( PChar ( 'c:\send.bat ' +bb),SW_SHOW);
MessageBox(Application . Handle, 'good' , 'info' , MB_OK +MB_ICONINFORMATION);
end ;
|
Все проходит как нада, но хотелось бы ожидать выполнение батника ну и контролировать сам процесс. Решил попробовать через CreateProcess:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 | procedure TForm1 . Button1Click(Sender: TObject);
begin
FillChar( Si, SizeOf( Si ) , 0 );
with Si do begin
cb := SizeOf( Si);
dwFlags := startf_UseShowWindow;
wShowWindow := 1 ;
end ;
.........
CreateProcess( nil , 'c:\send.bat +bb' , nil , nil , false , Create_default_error_mode, nil , nil ,si,p);
Waitforsingleobject(p . hProcess,infinite);
.........
|
Но тут не так все хоршо как хотелось, параметр "bb" он же "%1" в батнике передается не числом а текстом т.е. не "hello 01!" а "hello bb!" , подскажите, что я не так делаю? Или может есть другие варианты запуска батника?