Blog. Just Blog

Как получить хэндл контрола, на котором находится фокус

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Очередная мелкая развлекалочка на Ассемблере. Задача: узнать хэндл контрола в чужом окне, на котором в данный момент находится фокус. С получением активного окна проблем быть не должно, для этого достаточно вызвать функцию GetForegroundWindow. А дальше можно воспользоваться следующим кодом.
  1.         ; Получить ID текущего потока
  2.         invoke  GetCurrentThreadId
  3.         mov     [current],eax
  4.  
  5.         ; Получить хэндл активного окна
  6.         invoke  GetForegroundWindow
  7.         ; Получить ID потока чужого окна
  8.         invoke  GetWindowThreadProcessId,eax,tmp
  9.         mov     [remote],eax
  10.  
  11.         ; Подключиться к обработке ввода данных
  12.         invoke  AttachThreadInput,[remote],[current],TRUE
  13.         or      eax,eax
  14.         jz      .processed
  15.  
  16.         ; Получить хэндл активного контрола
  17.         invoke  GetFocus
  18.         or      eax,eax
  19.         jz      @f
  20.  
  21.         ; EAX -> хэндл активного контрола
  22. @@:
  23.         ; Отключиться от обработки ввода данных
  24.         invoke  AttachThreadInput,[remote],[current],FALSE
Первым делом узнаем идентификатор текущего потока своего процесса и идентификатор потока чужого окна, для которого надо решить описанную выше задачу. С помощью функции AttachThreadInput подключаем наш процесс к обработке ввода чужого окна. После этого нам становится доступна функция GetFocus, с помощью которой можно получить интересующий нас хэндл. Узнав нужные данные, обработку ввода надо отключить.

Код можно вызывать по таймеру или разово при необходимости, все зависит от поставленной задачи и ее реализации.

В приложении пример программы с исходным текстом, которая по таймеру получает содержимое активного контрола из чужих окон.

Пример программы с исходным текстом (FASM)Пример программы с исходным текстом (FASM)

Get.Current.Focus.Demo.zip (2,364 bytes)


Поделиться ссылкой ВКонтакте
Просмотров: 168 | Комментариев: 0

Метки: Assembler, окна

Комментарии

Отзывы посетителей сайта о статье
Комментариeв нет

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0073 сек.) / Память: 4.5 Mb
Наверх