Blog. Just Blog

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

07.11.2024 | Категория: Образ мышления: 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, с помощью которой можно получить интересующий нас хэндл. Узнав нужные данные, обработку ввода надо отключить.

Читать статью целиком »
Просмотров: 162 | Комментариев: 0

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 1 (0.0108 сек.) / Память: 4.5 Mb
Наверх