AfxMessageBox(strReceived,MB_ICONINFORMATION,0); //Вывести текст сообщения
}
catch(...)
{
return false; //Возникла ошибка - возвращаем флаг "сообщение не обработано"
}
return true; //Все в порядке - возвращаем истину
}
Проверка:
Запускаем несколько копий программы – отправителя, изменяем у каждой заголовок и текст отправляемого сообщения.
Проверяем работу.
Запускаем одну программу приемника.
Нажимаем по очереди кнопки OK у отправителя закрывая диалоговое окно сообщения о приеме у приемника.
Нажимаем по очереди кнопки OK у отправителя не закрывая диалоговое окно сообщения о приеме у приемника.
Реализация в BorlandDelphi:
1.Создаем диалоговое приложение (см. Visual C++) и обработчики нажатия кнопок.
Текст обработчиков приведен ниже.
procedure TForm1.OkButtonClick(Sender: TObject);
var hWin:THandle; //Номер окна, которому отсылаются данные
hMem:THandle; //Номер блока разделяемой памяти
lpStr:pointer; //Указатель на зафиксированную область памяти
strSend:string; //Строка для отправления
cdsStruct:COPYDATASTRUCT;
begin
try
hWin:=FindWindow(nil, //lpszClassName- имя класса окна приемника - неизвестно
'Receiver' //lpszWindowName- заголовок окна приемника
);
if hWin=0 then //Приемник не найден
//Вызвать исключительную ситуацию
raise Exception.Create('Receiver not found. Please run receiver and try again.');
strSend:=Edit1.Text; //Получить содержимое элемента управления в строку strSend
if strSend='' then //Пустая строка
raise Exception.Create('Please enter text and try again.');
//Выделить память для строки - память разделяемая и перемещаемая
hMem:=GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE,
//Размер блока- длина строки +1 для заключительного символа
Length(strSend)+1
);
if hMem=0 then
raise Exception.Create('Error allocating memory');
lpStr:=GlobalLock(hMem); //Зафиксировать память и получить указатель на нее
if lpStr=nil then
raise Exception.Create('Error memory fixation');
StrPCopy(lpStr,strSend); //Скопировать строку в разделяемую память
cdsStruct.cbData:=Length(strSend)+1; //Длина передаваемых данных
cdsStruct.lpData:=lpStr; //Указатель на передаваемую оббласть
cdsStruct.dwData:=Cardinal(Handle); //Номер окна отправителя(для нескольких отправителей)
if SendMessage( //Отослать сообщение окну приемнику
hWin, //Номер окна приемника
WM_COPYDATA, //Отправить с помощью сообщения WM_COPYDATA
WPARAM(hWin), //Номер окна приемника
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.