Форум: "WinAPI";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];
ВнизНе работает посылка сообщения в другую прогу!!! Найти похожие ветки
← →
oduvan (2002-08-13 17:20) [0]Сообщение посылается, но теряются данные (это когда обмениваются 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;
← →
cdaDmitriy (2002-08-13 17:26) [1]потому что integer(pChar(v1)),integer(pChar(v2) имеет смысл только в первом потоке и адрес в этом потоке а не во втором
← →
Игорь Шевченко (2002-08-13 17:29) [2]cdaDmitriy © (13.08.02 17:26)
В одном процессе.
oduvan © (13.08.02 17:20)
используйте WM_COPYDATA
← →
cdaDmitriy (2002-08-13 17:34) [3]>> Игорь Шевченко да я конечно имел ввиду ( в 2 процессах )
и что WM_COPYDATA поможет ??? не уверен
Думаю нужно из строки получить <ATOM> и его уже передавать
← →
Игорь Шевченко (2002-08-13 17:41) [4]cdaDmitriy © (13.08.02 17:34)
Поможет. (с) Джеффри Рихтер
← →
oduvan (2002-08-13 18:08) [5]А как пользоваться этой WM_COPYDATA???
Можно пример для отправки данных и для получения, мне необходимо в программе передать 2 текстовых параметра, как реализовать?
← →
Игорь Шевченко (2002-08-13 18:11) [6]oduvan © (13.08.02 18:08)
Можно пример. У Джеффри Рихтера в книжке
← →
oduvan (2002-08-13 18:20) [7]Не ну на самом деле, елси ты понимаешь в этом, что тебе мешает объяснить? Хелп ми Плиз!
← →
cdaDmitriy (2002-08-13 18:24) [8](с) Джеффри Рихтер конечно поможет но и там написано :
Увидев, что Вы посылаете сообщение WM_COPYDATA, SendMessage создает проек цию файла размером cbData байтов и копирует данные из адресного пространства Вашей программы в эту проекцию. Затем отправляет сообщение окну-приемнику При обработке этого сообщения принимающей оконной процедурой параметр lParam указывает на структуру COPYDATASTRUCT, которая находится в адресном простран стве процесса-приемника Элемент lpData этой структуры указывает на проекцию файла в адресном пространстве процесса-приемника.
и тоже можно решить ( Я думаю ) с
ATOM GlobalAddAtom( LPCTSTR lpString
// pointer to the string to add
);
← →
Игорь Шевченко (2002-08-13 18:29) [9]Джеффри Рихтер пишет правильно. А зачем таблицу атомов мучить ? Она не резиновая :-)))
Кстати, создается не совсем проекция файла, а просто выделяется область виртуальной памяти (section)
← →
oduvan (2002-08-13 18:37) [10]ВСе ок! WM_COPYDATA работет отлично!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c