![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача параметров другой программе.
Новичек © (2007-11-18 12:44:00)Прошу помочь мне с таким вопросом.
Имеется программа, из которой запускается другая программа. А как этой другой программе передать некоторые данные?
Я зарегистрировал в обоих прогах собственное сообщение с помощью RegisterWindowMessage. А дальше как? Спасибо.
Новичек (2007-11-18 14:39:00) [1]Понял, спасибо.
Palladin (2007-11-18 14:36:00) [2]он срабатывает, несрабатывает ParamStr
Anatoly Podgoretsky (2007-11-18 14:34:00) [3]> Новичек (18.11.2007 14:30:22) [22]
CreateProcess это функция
Новичек (2007-11-18 14:30:00) [4]Понял.
А почему такой вызов не срабатывает
CreateProcess('app2.exe', ' "one two" ', nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
Palladin (2007-11-18 14:25:00) [5]
> Новичек © (18.11.07 14:23) [20]
я же не зря кавычки привел
CreateProcess(nil, 'app2.exe "one two"', nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
ps. CreateProcess возвращает логическое значение, а не то что ты думаешь
Новичек (2007-11-18 14:23:00) [6]
> Приводи текст вызова.
Prog_Exe := CreateProcess('app2.exe', 'one two', nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
Anatoly Podgoretsky (2007-11-18 14:15:00) [7]
> Только небольшой глюк - если
> > YourApp2.exe "<строка>"
> состоит из двух слов, то
Приводи текст вызова.
Ты прочитал, что тебе написали про спецсимволы?
Кроме ParamStr есть и другие методы достучаться до командной строки.
Palladin (2007-11-18 14:13:00) [8]я? нет :) я лишь разумно предупредил человека о существующих количественных ограничениях на общих размер, передаваемых через коммандную строку, параметров...
Новичек (2007-11-18 14:13:00) [9]Проверил - работает :)
Только небольшой глюк - если
> YourApp2.exe "<строка>"
состоит из двух слов, то
> ShowMessage(ParamStr(1));
показывает второе слово :)
Anatoly Podgoretsky (2007-11-18 14:12:00) [10]Ты надеялся так легко отделаться?
Palladin (2007-11-18 14:04:00) [11]ok :)
Var
s:String;
SI:TStartUpInfo;
PI:TProcessInformation;
l:Integer;
begin
s:=vtvProgramPath+'project3.exe "';
l:=Length(s);
SetLength(s,l+500*1024*1024);
FillChar(s[l+1],Length(s)-l-1,'a');
s[Length(s)]:='"';
ZeroMemory(@SI,SizeOf(SI));
SI.cb:=SizeOf(SI);
SI.dwFlags:=STARTF_USESHOWWINDOW;
SI.wShowWindow:=SW_SHOWNORMAL;
If Not CreateProcess(Nil,PChar(s),Nil,Nil,True,NORMAL_PRIORITY_CLASS,Nil,Nil,SI,PI) Then RaiseLastOSError;
end;
параметр почему то задан неверно :)
Anatoly Podgoretsky (2007-11-18 13:46:00) [12]> Palladin (18.11.2007 13:40:13) [13]
А чего ты сюда привязал ShellExecute у него же ограничение на размер командной строки, используй CreateProcess
Palladin (2007-11-18 13:40:00) [13]
> Anatoly Podgoretsky © (18.11.07 13:25) [11]
да ну :) а чего ж тогда
SetLength(s,500*1024*1024);
FillChar(s[1],Length(s),'a');
s[1]:='"';
s[Length(s)]:='"';
ShellExecute(0,nil,'project3.exe',PChar(s),nil,SW_NORMAL);
SE_ERR_OOM возвращает то? :)
Anatoly Podgoretsky (2007-11-18 13:25:00) [14]> Новичек (18.11.2007 13:16:10) [10]
Двойные кавычки нужные если строка содержит специальные символы, например и особенно пробелы.
Anatoly Podgoretsky (2007-11-18 13:25:00) [15]> Palladin (18.11.2007 13:14:09) [9]
С управляющими символами есть некоторая проблема, а с размером - каждой программе выделено 2 гб виртуального, адресного пространства.
Новичек (2007-11-18 13:16:00) [16]Сейчас же испытаю.
Palladin (2007-11-18 13:14:00) [17]проще пареной репы
YourApp2.exe "<строка>"
ShowMessage(ParamStr(1));
другое дело если она может содержать управляемые символы или быть размером в пол гига :)
Новичек (2007-11-18 13:12:00) [18]2Palladin
Ежели честно, то я несколько запутался. Передать необходимо строку.
Palladin (2007-11-18 13:07:00) [19]
> Новичек © (18.11.07 13:04) [5]
а чем он тебе плох то? ты просто изначально двусмысленный вопрос задал... то ли тебе данные нужно передать, то ли параметры... если передаваемые данные имеют четкую неизменную структуру и их немного, то, поверь, проще работать с параметрами...
Anatoly Podgoretsky (2007-11-18 13:05:00) [20]> Новичек (18.11.2007 13:04:05) [5]
Другого нет