Меня достаточно часто спрашивают о том, как закрыть чужое окно. Среди Win API есть функция CloseWindow, и большинство пытается использовать ее, но в результате окно только сворачивается, но не закрывается. Что же делать?

Ответ напрашивается сам собой, если внимательно прочитать раздел 3.1. В нем мы говорили о том, что при выключении компьютера ОС посылает всем окнам сообщение с просьбой завершить работу. Нам нужно поступить так же.

Давайте создадим простой пример, в котором будем искать определенное окно, и если оно существует, то посылать ему сообщение WM_QUIT, означающее завершение работы. На главном окне нам понадобится только одна кнопка, по событию OnClick которой будет происходить закрытие (листинг 3.1).

Листинг 3.1. Код закрытия чужого окна

procedure TForml ButtonlClick(Sender: TObject); var wnd: HWND; begin wnd •= FindWindow(ni1 'Безымянный - Блокнот'), if wnd <> 0 then PostMessage(wnd. WM_QUIT. 1.0).

end:

Для реализации примера создадим одну переменную типа HWND для сохранения идентификатора окна, которое надо закрыть Но сначала это окно нужно найти. Для этого используем функцию FindWindow. Ей нужно передать два параметра: класс окна и текст, указанный в заголовке. Не будем усложнять жизнь определением класса, поэтому оставим этот параметр нулевым, а искать будем по второму параметру. В листинге указан заголовок программы "Блокнот". Результат поиска сохраняем в специально отведенной для этого переменной.

После поиска обязательно проверяем результат. Если мы получили ненулевое значение, то окно найдено, в противном случае произошла ошибка и окно скорее всего, отсутствует.

Теперь посылаем сообщение. Для этого используется функция PostMessage, имеющая следующие параметры:

• идентификатор окна, которому надо отправить сообщение. Указываем то, что возвратила функция FindWindow;
• тип сообщения. Нас интересует выход, поэтому передаем WM_QUIT;
• WParam - первый параметр. Для сообщения WMQUIT указывается код выхода;

• LParam - второй параметр сообщения. Для сообщения WMQUIT не используется.

Откройте программу "Блокнот" с пустым документом и запустите нашу программу. После нажатия кнопки "Блокнот" должен закрыться.

ПРИМЕЧАНИЕ -

Исходный код рассмотренного здесь примера находится на компакт-диске в каталоге Sources\ch03\Close Window.

3.1. "Злое" окно || Оглавление || 3.3. Шутки над буфером обмена


Delphi в шутку и всерьез: что умеют хакеры



Новости за месяц

  • Декабрь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31