![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Друзья, подскажите!
Суть есть скрипт, от которого я получаю данные. ПУТЬ ПРОГРАММЫ + ПАРАМЕТР ОТВЕТ В командной строке это выглядит так: Код:
\\dom\php.cmd 2123 45514 Так вот, мне надо научится обращаться к скрипту из Дельфи. А ответ забивать в переменную. |
|
#2
|
||||
|
||||
|
Пример из drkb (02101)
Код:
procedure RDM(CmdLine:string; AMemo:TMemo);
const ReadBuffer = 2400;
var
Security: TSecurityAttributes;
ReadPipe, WritePipe: THandle;
Start: TStartUpInfo;
ProcessInfo: TProcessInformation;
Buffer: Pchar;
BytesRead, Apprunning: DWord;
begin
With Security do
begin
nlength:= SizeOf(TSecurityAttributes);
binherithandle:= true;
lpsecuritydescriptor:= nil;
end;
if CreatePipe (ReadPipe, WritePipe, @Security, 0) then
begin
Buffer:= AllocMem(ReadBuffer + 1);
FillChar(Start,Sizeof(Start),#0);
Start.cb:= SizeOf(Start);
Start.hStdOutput:= WritePipe;
Start.hStdInput:= ReadPipe;
Start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
Start.wShowWindow:= SW_HIDE;
if CreateProcess(nil, PChar(CmdLine), @Security, @Security, true, NORMAL_PRIORITY_CLASS, nil, nil, Start, ProcessInfo)
then
begin
repeat
Apprunning:= WaitForSingleObject(ProcessInfo.hProcess,100);
ReadFile(ReadPipe, Buffer[0], ReadBuffer, BytesRead, nil);
Buffer[BytesRead]:= #0;
OemToAnsi(Buffer, Buffer);
AMemo.Text:= AMemo.text + String(Buffer);
until
(Apprunning <> WAIT_TIMEOUT);
end;
FreeMem(Buffer);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ReadPipe);
CloseHandle(WritePipe);
end;
end;Код:
RDM('\\dom\php.cmd 2123', Memo1); |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
draginimp (27.10.2014)
| ||
|
#3
|
|||
|
|||
|
запускаю пинг все ок
Код:
RunDosInMemo('ping -t 192.168.28.200',Memo1);Код:
RunDosInMemo('\\dom\php\php.exe \\dom\php\dt.php 9754', memo1);Я думал, что проблема в пробелах, но вроде нет. Мне кажется, что я не правильно обращаюсь к командной строке из делфи Есть стойкое ощущение, что после .ехе, ничего больше не выполняется, то есть не принимает после пробела. пробовал Код:
RunDosInMemo('"\\dom\php\php.exe \\dom\php\dt.php 9754"', memo1);Последний раз редактировалось draginimp, 27.10.2014 в 16:36. |
|
#4
|
||||
|
||||
|
Цитата:
Код:
...
WinExec(PAnsiChar( {$path} '\..\dom\php\php.exe \..\dom\php\dt.php 9754'), SW_SHOWNORMAL);
... |
|
#5
|
|||
|
|||
|
Нет, запускается только до пробела.
Запускается только сам EXE. Если в командную строку вбивать, то все работает. Последний раз редактировалось draginimp, 28.10.2014 в 10:20. |
|
#6
|
||||
|
||||
|
Извнт, почти не сталкивался с пиэйчипой, не судьба была как-то ПХП юзать
а если WinExecEx() задействовать, без первого акта марлезонского балету (без вызова самого php.exe) в смысле пусть винда сама определит открывателя файла dt.php с вашими параметрами, не поможет такое? |