- •Передача данных между процессами посредством сообщений
- •Задание
- •Программа работы
- •Использованные компоненты и методы программы “Source”:
- •Листинг программы “Dest” – приёмник сообщений
- •If not r then ShowMessage('Ошибка передачи сообщения.');
- •Использованные компоненты и методы:
- •Результат работы программ
- •Листинг заголовочного файла программы:
- •Лабораторная работа №2 Создание, запуск и управление процессами в многозадачной ос.
- •Листинг исполняемого файла программы:
- •Результат работы программы:
- •Листинг заголовочного файла программы:
- •Листинг исполняемого файла программы:
- •Результат работы программы:
- •Ответы на контрольные вопросы:
- •Лабораторная работа № 4 Синхронизация задач с помощью событий.
- •Программа работы:
- •Листинг заголовочного файла программы “source”:
- •Листинг исполняемого файла программы “source”:
- •Листинг заголовочного файла программы “dest”:
- •Результат работы программы:
- •Результат работы программы:
- •Ответы на контрольные вопросы:
- •Результат работы программы:
- •Ответы на контрольные вопросы:
Листинг программы “Dest” – приёмник сообщений
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls;
type
TDest = class(TForm)
Memo1: TMemo;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure obrmes(var Msg: TMsg; var Handled: Boolean);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Dest: TDest;
Kolvo: Integer;
implementation
{$R *.dfm}
procedure TDest.obrmes(var Msg: TMsg; var Handled: Boolean); //Обработка сообщений
begin
if Msg.message = wm_KeyDown then
begin
Inc(Kolvo);
edit1.Text:=IntToStr(Kolvo);
Memo1.Lines.Append('Получено сообщение wm_KeyDown No ' + IntToStr(Kolvo));
Memo1.Lines.Append('Параметры текущего сообщения:');
Memo1.Lines.Append('wParam = '+IntToStr(Msg.wParam));
Memo1.Lines.Append('lParam = '+IntToStr(Msg.lParam));
Memo1.Lines.Append('');
end;
end;
procedure TDest.FormCreate(Sender: TObject);
begin
Application.OnMessage := obrmes;
Kolvo:=0;
end;
procedure TDest.Button1Click(Sender: TObject);
begin
Memo1.Clear;
end;
procedure TDest.Button2Click(Sender: TObject);
var
r: Bool;
begin
r:=PostMessage(Dest.Handle, wm_KeyDown, Random(255), Random(255));
If not r then ShowMessage('Ошибка передачи сообщения.');
end;
procedure TDest.Button3Click(Sender: TObject);
begin
Kolvo:=0;
Edit1.Text:=IntToStr(Kolvo);
end;
end.
Использованные компоненты и методы:
В данной программе использовались следующие компоненты: многострочное текстовое поле Memo1; две текстовые метки Label1 и Label2; однострочное текстовое поле Edit1; три кнопки – Button1, Button2, Button3. Во время загрузки программы объявляется новый метод-обработчик сообщений – процедура obrmes. Во время получения сообщения информация о нём выводится в поле Memo1 и наращивается счётчик сообщений на единицу. Поле Edit1 используется для вывода значения счётчика. С помощью кнопки Button1 очищается окно вывода информации о сообщении, при этом используется метод компонента Memo – Clear. С помощью кнопки Button2 программа посылает себе контрольное сообщение. С помощью кнопки Button3 сбрасывается счётчик сообщений.
Результат работы программ
Ответы на контрольные вопросы:
1. Что представляет собой сообщение? Опишите структуру типа для данных этого типа.
Сообщения – это информационные пакеты, представляющие собой структуры записей типа TMsg.
структуры записей типа TMsg.
TMsg = packed record
hwnd: HWND; //описатель окна, которому направлено сообщение
message: UINT; //идентификатор сообщения
wParam: WPARAM; //параметр сообщения
lParam: LPARAM; //параметр сообщения
time: DWORD; //время, когда сообщение было послано
pt: TPoint; //координаты мыши в момент посылания сообщения
end;
2.Каким образом обрабатываются сообщения, получаемые приложениями Windows?
Каждое сообщение Windows уникальным образом идентифицируется числом с соответствующим мнемоническим идентификатором.
3.С помощью каких функций приложения Windows могут посылать сообщения? Дайте описание параметров этих функций.
Приложения Windows могут посылать сообщения с помощью функций SendMessage().
Вывод
В ходе данной лабораторной работы мне удалось написать две программы, между которыми осуществляется обмен сообщениями и, тем самым, ознакомиться с технологией передачи сообщений между процессами в операционной системе Windows.
Выполнил……………………………………………………………Погодаев А.М.
Преподаватель…………………………………………………………Мохов В.А.
