Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчёт по лабораторным работам.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
397.82 Кб
Скачать

-33-

Лабораторная работа № 1

Передача данных между процессами посредством сообщений

Цель работы: ознакомиться и освоить технологию передачи сообщений в среде ОС Windows.

Оборудование: ПЭВМ IBM PC-AT 486 и выше.

Программные средства: ОС Windows (95/98/2000, ME, NT), Delphi 3.* (4.*, 5.*, 6.*), файл справочной документации по функциям API библиотеки WIN32 (win32.hlp).

Задание

Создать программный комплекс, состоящий из двух процессов Windows (приложений), первый из которых является генератором сообщений для второго; второй принимает сообщения от первого и обрабатывает их по заданному алгоритму.

Программа работы

  1. Ознакомиться с технологией передачи сообщений в ОС Windows.

  2. Изучить формат сообщения WM_KEYDOWN.

  3. Ознакомиться с функциями получения описателя окна по его имени (FindWindow()) и отправки сообщений (SendMessage() и PostMessage()).

  4. Ознакомиться с принципами обработки сообщений объектом TApplication.

  5. Написать две программы для обмена данных посредством сообщения WM_KEYDOWN.

  6. Выявить и исправить ошибки, создать удобный интерфейс и расставить по тексту программ комментарии.

  7. Провести испытания и продемонстрировать работу программного комплекса преподавателю.

Листинг программы “Source” – источник сообщений

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, jpeg, ExtCtrls;

type

TSource = class(TForm)

Button1: TButton;

Label1: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Label2: TLabel;

Label3: TLabel;

Image1: TImage;

procedure PoiskDest;

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Source: TSource;

Desten: hWnd;

implementation

{$R *.dfm}

procedure TSource.PoiskDest;

begin

Desten:=FindWindow('TDest', 'Dest');

if Desten=0 Then

ShowMessage('Окно-приёмник не найдено! Программа Dest не запущена?');

end;

procedure TSource.Button1Click(Sender: TObject);

var

r: Bool;

wParam, lParam: Integer;

begin

if Desten=0 Then PoiskDest;

Val(Edit1.Text, wParam, wParam);

Val(Edit2.Text, lParam, lParam);

r:=PostMessage(Desten, wm_KeyDown, wParam, lParam);

if not r then ShowMessage('Ошибка передачи сообщения.');

end;

procedure TSource.FormCreate(Sender: TObject);

begin

PoiskDest;

end;

end.

Использованные компоненты и методы программы “Source”:

В данной программе использовались следующие компоненты: кнопка Button1; текстовые метки Label1, Label2, Label3; два однострочных текстовых поля – Edit1 и Edit2. Процедура PoiskDest для поиска программы-приёмника и выдачи сообщения в случае ошибки. Поиск осуществляется при запуске программы и по нажатию кнопки Button1, если программа приёмник не найдена. С помощью кнопки Button1 осуществляется отправка сообщения WM_KEYDOWN программе-приёмнику, при этом параметры wParam и lParam сообщения соответственно равны числам, введённым в поля Edit1 и Edit2.