Найти и уничтожить

Попробуем найти определенное окно и уничтожить его. Для этого создайте новое приложение Win32 Project, а также пункт меню, по нажатию которого будет выполняться наш код.

Теперь перейдите в функцию WndProc, в которой обрабатываются все события окна. В начало этой функции нужно добавить переменную h типа HWND, что будет выглядеть примерно так:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
HWND h;

А дальше добавим обработчик события нашего меню:

case ID_MYCOMMAND_FINDANDDESTROY:
h=FindWindow(0, "1 — Блокнот ");
if (h!=0)
SendMessage(h, WM_DESTROY, 0, 0);
break;

С помощью уже знакомой нам функции FindWindow мы ищем окно, у которого в заголовке есть текст "1 — Блокнот". Результат поиска сохраняем в переменной h. В качестве параметра поиска задаем только заголовок окна, а класс окна оставляем пустым (его не всегда можно определить). В этом и состоит тонкость программы, потому что большинство приложений с открытым документом имеет заголовок типа "Имя документа — Название приложения", например, "MyTestDoc — Microsoft Word". Если открытых документов нет, в заголовке остается название программы — "Microsoft Word". Только в этом случае функция FindWindow может однозначно определить окно, которое надо найти, иначе она возвратит 0. Если проверка переменной h показывает, что окно найдено, то посылается сообщение WM_DESTROY, чтобы уничтожить его.

Как видите, поиск окна по заголовку нельзя назвать точным и надежным.

В этом примере окно уничтожается только по выбору соответствующего пункта меню.

А что, если перенести этот код в цикл обработки сообщений следующим образом:

// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
h=FindWindow(0, "1 - Блокнот");
if (h!=0)
SendMessage(h, WM_DESTROY, 0,0);

if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

В этом случае при наступлении любого события в искомом окне программа найдет и уничтожит его. Можно пойти еще дальше и поместить поиск в бесконечный цикл, тогда программа, не дожидаясь какого-либо события, будет постоянно искать и уничтожать окно. Таким способом вы можете ограничить пользователя в запуске определенных программ.

free-templates.ru
Сайт управляется системой uCoz