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

Вниз

Передача параметров другой программе.   Найти похожие ветки 

 
Новичек ©   (2007-11-18 12:44) [0]

Прошу помочь мне с таким вопросом.
Имеется программа, из которой запускается другая программа. А как этой другой программе передать некоторые данные?
Я зарегистрировал в обоих прогах собственное сообщение с помощью RegisterWindowMessage. А дальше как? Спасибо.


 
Palladin ©   (2007-11-18 12:57) [1]

Зачем тебе свое сообщение регистрировать? Есть стандартное WM_COPYDATA


 
Anatoly Podgoretsky ©   (2007-11-18 12:58) [2]

> Новичек  (18.11.2007 12:44:00)  [0]

Так сообщения или параметры?


 
Новичек ©   (2007-11-18 13:01) [3]


> Так сообщения или параметры?

Параметры.

> Зачем тебе свое сообщение регистрировать? Есть стандартное
> WM_COPYDATA

Ну, конечно же :)
Спасибо, уважаемые знатоки.


 
Anatoly Podgoretsky ©   (2007-11-18 13:03) [4]

> Новичек  (18.11.2007 13:01:03)  [3]

Параметры, начиная с ДОС, передаются стандарно ИмяПрограммы параметры


 
Новичек ©   (2007-11-18 13:04) [5]


> Параметры, начиная с ДОС, передаются стандарно ИмяПрограммы
> параметры

Не очень хотелось использовать этот метод.


 
Anatoly Podgoretsky ©   (2007-11-18 13:05) [6]

> Новичек  (18.11.2007 13:04:05)  [5]

Другого нет


 
Palladin ©   (2007-11-18 13:07) [7]


> Новичек ©   (18.11.07 13:04) [5]

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


 
Новичек ©   (2007-11-18 13:12) [8]

2Palladin
Ежели честно, то я несколько запутался. Передать необходимо строку.


 
Palladin ©   (2007-11-18 13:14) [9]

проще пареной репы

YourApp2.exe "<строка>"

ShowMessage(ParamStr(1));

другое дело если она может содержать управляемые символы или быть размером в пол гига :)


 
Новичек ©   (2007-11-18 13:16) [10]

Сейчас же испытаю.


 
Anatoly Podgoretsky ©   (2007-11-18 13:25) [11]

> Palladin  (18.11.2007 13:14:09)  [9]

С управляющими символами есть некоторая проблема, а с размером - каждой программе выделено 2 гб виртуального, адресного пространства.


 
Anatoly Podgoretsky ©   (2007-11-18 13:25) [12]

> Новичек  (18.11.2007 13:16:10)  [10]

Двойные кавычки нужные если строка содержит специальные символы, например и особенно пробелы.


 
Palladin ©   (2007-11-18 13:40) [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:46) [14]

> Palladin  (18.11.2007 13:40:13)  [13]

А чего ты сюда привязал ShellExecute у него же ограничение на размер командной строки, используй CreateProcess


 
Palladin ©   (2007-11-18 14:04) [15]

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 14:12) [16]

Ты надеялся так легко отделаться?


 
Новичек ©   (2007-11-18 14:13) [17]

Проверил - работает :)
Только небольшой глюк - если
> YourApp2.exe "<строка>"
состоит из двух слов, то
> ShowMessage(ParamStr(1));
показывает второе слово :)


 
Palladin ©   (2007-11-18 14:13) [18]

я? нет :) я лишь разумно предупредил человека о существующих количественных ограничениях на общих размер, передаваемых через коммандную строку, параметров...


 
Anatoly Podgoretsky ©   (2007-11-18 14:15) [19]


> Только небольшой глюк - если
> > YourApp2.exe "<строка>"
> состоит из двух слов, то

Приводи текст вызова.
Ты прочитал, что тебе написали про спецсимволы?
Кроме ParamStr есть и другие методы достучаться до командной строки.


 
Новичек ©   (2007-11-18 14:23) [20]


> Приводи текст вызова.

Prog_Exe := CreateProcess("app2.exe", "one two", nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);


 
Palladin ©   (2007-11-18 14:25) [21]


> Новичек ©   (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:30) [22]

Понял.
А почему такой вызов не срабатывает
CreateProcess("app2.exe", " "one two" ", nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);


 
Anatoly Podgoretsky ©   (2007-11-18 14:34) [23]

> Новичек  (18.11.2007 14:30:22)  [22]

CreateProcess это функция


 
Palladin ©   (2007-11-18 14:36) [24]

он срабатывает, несрабатывает ParamStr


 
Новичек ©   (2007-11-18 14:39) [25]

Понял, спасибо.



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

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

Наверх




Память: 0.52 MB
Время: 0.027 c
2-1195687391
scvish
2007-11-22 02:23
2007.12.16
работа с архиватором


15-1195307639
@!!ex
2007-11-17 16:53
2007.12.16
Как настроить "локальный" интернет?


3-1187079408
alex_tonk
2007-08-14 12:16
2007.12.16
Создание DBF-ника


15-1194870352
Leonid Troyanovsky
2007-11-12 15:25
2007.12.16
Вредные советы чайникам


11-1181733015
andreykorol
2007-06-13 15:10
2007.12.16
Управление таймером из другого потока