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


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


  • идентификатор найденного окна типа HWND;
  • значение типа LPARAM, которое вы можете использовать в своих целях.

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

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

  • идентификатор окна, которому надо отослать сообщение, — передан в качестве параметра функции-ловушки EnumWindowsWnd, и он равен идентификатору найденного окна;
  • тип сообщения — WM_SETTEXT, заставляет окно сменить текст заголовка;
  • параметр для данного сообщения должен быть 0;
  • новое имя окна.

Чтобы программа продолжила поиск следующего окна, ей надо вернуть значение TRUE.

Примечание
Исходный код этого примера вы можете найти на компакт-диске в каталоге \Demo\Chapter3\ISeeYou.

Давайте немного усложним пример. Для начала изменим функцию 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"))); EnumChildWindows(hwnd,&EnumChildWnd,0); return TRUE; }

Здесь после отправки сообщения вызывается функция EnumChildWindows, которая определяет все окна, принадлежащие главному окну. У нее три параметра:

  • идентификатор окна, дочерние элементы которого нужно искать, — указываем окно, которое уже нашли;
  • адрес функции обратного вызова, которая будет запускаться каждый раз, когда найдено дочернее окно;



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



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