Программирование на C++ глазами хакера


Работа с чужыми окнами


Я регулярно получаю письма с вопросами типа: "Как уничтожить чужое окно или изменить что-то в нем?" В принципе, эта задача легко решается с помощью уже знакомой нам функции FindWindow. Но если необходимо изменить множество окон (или даже все), то нужно использовать другой метод поиска, который мы сейчас рассмотрим. Для начала напишем программу, которая будет искать все окна на Рабочем столе и изменять их заголовки.

Рис. 3.1. Результат работы программы I SeeYou

На рис. 3.1 показан вид нескольких окон после запуска программы, которую нам сейчас предстоит написать. Как видите, все заголовки изменились на "I See You".

Создайте в Visual C++ новый проект Win32 Project и в нем какой-нибудь пункт меню, при выборе которого будет запускаться программа, реализующая нашу задачу.

В функции WndProc добавьте следующий код обработки пункта меню:

case ID_MYCOMMANDS_ISEEYOU: while (TRUE) { EnumWindows(&EnumWindowsWnd, 0); }

В приведенном коде ID_MYCOMMANDS_ISEEYOU — это идентификатор пункта меню. Цикл while будет выполняться бесконечно (TRUE никогда не станет равным FALSE). Внутри цикла вызывается функция EnumWindows. Это WinAPI -функция, которая используется для перечисления всех открытых окон.

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

В качестве функции обратного вызова будет использоваться функция EnumWindowsWnd. Так что, каждый раз, когда EnumWindows найдет окно, будет выполняться код, написанный в EnumWindowsWnd. Этот код выглядит следующим образом:

BOOL CALLBACK EnumWindowsWnd( HWND hwnd, // handle to parent window // (Указатель на главное окно) LPARAM lParam // application-defined value // (значение, определенное приложением) ) { SendMessage(hwnd, WM_SETTEXT, 0, LPARAM(LPCTSTR("I See You"))); return TRUE; }

Количество параметров, их тип и тип возвращаемого значения должны быть именно такими:




Начало  Назад  Вперед



Книжный магазин