390______________________________________________Глава 6

этот инструмент (см. раздел 2.4.5). Откомпилируйте новый проект и сохраните. I
дальнейшем мы еще к нему вернемся.

Теперь давайте попробуем управлять этим проектом из формы Formi проект,
PMessl. Откройте опять проект PMessI и добавьте на форму Formi две кнопки.
сделав на них надписи Exec Pmess2 и Close Pmess2. В обработчике щелчка перво,,
кнопки напишите оператор

WinExec("Pmess2.exe",SW_RESTORE) ;

который, как вы уже знаете, запускает приложение PMess2 на выполнение. A T(
перь давайте попробуем его закрыть. Для этого в обработчике щелчка кнопки Clos
Pmess2 напишите оператор

SendMessage(FindWindow("TFormI","Приложение Pmess2"), WM_CLOSE,0,0) ;

Этот оператор использует функцию FindWindow для получения дискриптор.
окна приложения, которому надо послать сообщение, а затем функцией SendMes-
sage посылает сообщение WM_CLOSE.

Сохраните и запустите приложение. Теперь, нажимая кнопку Exec Pmess2, вы
можете выполнять приложение PMess2, причем можете создать несколько экземп-
ляров этого приложения. А кнопкой Close Pmess2 можете закрывать приложение
PMess2.

Вы получили возможность управлять из своего приложения другими. Но в
данном случае вы знали класс окна (TFormI) внешнего приложения, поскольку
вы сами его создавали. Поэтому вы смогли применить функцию FindWindow, пе-
редав в нее и имя класса, и заголовок окна. А как быть, если вы хотите закрыть
какое-то чужое приложение? Например, вы из своего приложения выполнили
стандартное приложение Windows «Калькулятор», пользователь посчитал, что
ему было надо, а теперь вы хотите закрыть «Калькулятор», послав ему сообщение
WM_CLOSE (например, пользователь уже не работает с ним, а закрыть забыл).

При посылке сообщения другому приложению возникает задача определить
дескриптор нужного окна. Как это можно сделать обсуждалось ранее в разделе
6.2.1. Если вы определили имя класса необходимого вам приложение (например,
SciCalc для приложения «Калькулятор») с помощью WinSight 32 и хотите послать
из своего приложения сообщение о закрытии калькулятора, вы можете выполнить
оператор:

SendMessage(FindWindow("SciCalc","Калькулятор"),WM CLOSE,0,0);

Если вы определили дескриптор окна способами, изложенными в 6.2.1, то вы
просто посылаете сообщение окну с данным дескриптором.

6.3.3 Обработка сообщений

Во всех оконных компонентах предусмотрены обработчики сообщений Win-
dows по умолчанию. До сих пор вы пользовались именно стандартными обработчи-
ками сообщений. Однако, вы можете определить и свои собственные обработчики,
заменив ими обработчики по умолчанию, или дополнив их.

Для введения собственного обработчика сообщения Windows надо сделать сле-
дующее:

1. Создать в объявлении класса карту (тар) сообщений и ввести в нее те сообще-
ния, которые вы хотите обрабатывать сами.

2. Добавить в объявление класса объявления вводимых вами обработчиков.

3. Описать эти обработчики в вашем модуле.

Первый шаг — объявление карты сообщений, легко осуществляется с помощью
следующих макросов: