![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не работает посылка сообщения в другую прогу!!! [D6, WinXP]
oduvan © (2002-08-13 17:20:00)Сообщение посылается, но теряются данные (это когда обмениваются 2 программы). Если весь этот код поместить в одну программу все работает, что я делаю не так???
Имеется:
const
WM_MAIN=WM_USER+10000;
type
TWMMain=packed record
msg:Cardinal;
Email:PCHar;
Text:PCHar;
end;
В одной форме:
SendMessage(FindWindow(pchar("TPostForm"),nil),WM_MAIN, integer(pChar(v1)),integer(pChar(v2)));
В другой:
private
procedure GetEmail(var msg:TWMMain);message WM_MAIN;
.......
procedure TPostForm.GetEmail(var msg:TWMMain);
begin
SetForegroundWindow(handle);
SetWindowPos(handle,HWND_TOPMOST,left,top,width,height,SWP_SHOWWINDOW);
SetWindowPos(handle,HWND_NOTOPMOST,left,top,width,height,SWP_SHOWWINDOW);
showmessage(msg.Email+" "+msg.Text);<- Тут выдает ошибку
end;
oduvan (2002-08-13 18:37:00) [1]ВСе ок! WM_COPYDATA работет отлично!
Игорь Шевченко (2002-08-13 18:29:00) [2]Джеффри Рихтер пишет правильно. А зачем таблицу атомов мучить ? Она не резиновая :-)))
Кстати, создается не совсем проекция файла, а просто выделяется область виртуальной памяти (section)
cdaDmitriy (2002-08-13 18:24:00) [3](с) Джеффри Рихтер конечно поможет но и там написано :
Увидев, что Вы посылаете сообщение WM_COPYDATA, SendMessage создает проек цию файла размером cbData байтов и копирует данные из адресного пространства Вашей программы в эту проекцию. Затем отправляет сообщение окну-приемнику При обработке этого сообщения принимающей оконной процедурой параметр lParam указывает на структуру COPYDATASTRUCT, которая находится в адресном простран стве процесса-приемника Элемент lpData этой структуры указывает на проекцию файла в адресном пространстве процесса-приемника.
и тоже можно решить ( Я думаю ) с
ATOM GlobalAddAtom( LPCTSTR lpString
// pointer to the string to add
);
oduvan (2002-08-13 18:20:00) [4]Не ну на самом деле, елси ты понимаешь в этом, что тебе мешает объяснить? Хелп ми Плиз!
Игорь Шевченко (2002-08-13 18:11:00) [5]oduvan © (13.08.02 18:08)
Можно пример. У Джеффри Рихтера в книжке
oduvan (2002-08-13 18:08:00) [6]А как пользоваться этой WM_COPYDATA???
Можно пример для отправки данных и для получения, мне необходимо в программе передать 2 текстовых параметра, как реализовать?
Игорь Шевченко (2002-08-13 17:41:00) [7]cdaDmitriy © (13.08.02 17:34)
Поможет. (с) Джеффри Рихтер
cdaDmitriy (2002-08-13 17:34:00) [8]>> Игорь Шевченко да я конечно имел ввиду ( в 2 процессах )
и что WM_COPYDATA поможет ??? не уверен
Думаю нужно из строки получить <ATOM> и его уже передавать
Игорь Шевченко (2002-08-13 17:29:00) [9]cdaDmitriy © (13.08.02 17:26)
В одном процессе.
oduvan © (13.08.02 17:20)
используйте WM_COPYDATA
cdaDmitriy (2002-08-13 17:26:00) [10]потому что integer(pChar(v1)),integer(pChar(v2) имеет смысл только в первом потоке и адрес в этом потоке а не во втором