Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Как получить текст под курсором

18.11.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter
Технология Microsoft Active Accessibility предназначена для взаимодействия различных устройств типа экранных читалок с объектами на экране, чтобы облегчить работу с компьютером людям с ограниченными физическими возможностями. При помощи Microsoft Active Accessibility, например, можно узнать, над каким элементом экрана находится курсор мыши, а также получить тип и содержимое этого элемента. Этим мы и воспользуемся, чтобы получить текст под курсором.

С технологией MSAA мы уже познакомились в статье про перехват Alt+Tab, только не заостряли внимание, что это именно она. Зато не придется дублировать структуры и интерфейсы, они уже описаны в статье по ссылке. Поэтому сразу переходим к программированию.
  1.         ; Получить координаты курсора
  2.         invoke  GetCursorPos,curs
  3.         ; Получить объект под курсором
  4.         invoke  AccessibleObjectFromPoint,[curs.x],[curs.y],pAcc,varChild
По таймеру или по какому-то другому событию получаем текущие координаты курсора, затем при помощи функции AccessibleObjectFromPoint получаем объект, который находится на экране по этим координатам. В случае удачного вызова, она возвращает указатель на интерфейс IAccessible объекта. Теперь можно попробовать получить текст под курсором, но сперва небольшое отступление.
  1.         ; Получить роль объекта под курсором
  2.         mov     [role.vt],VT_I4
  3.         push    role
  4.         mov     eax,varChild
  5.         push    dword [eax+0Ch]
  6.         push    dword [eax+08h]
  7.         push    dword [eax+04h]
  8.         push    dword [eax]
  9.         mov     eax,[pAcc]
  10.         mov     eax,[eax]
  11.         stdcall dword [eax+IAccessible.get_accRole],[pAcc]
  12.         ; [role.lVal] -> код роли объекта (кнопка, полоса прокрутки, текст и т.п.)
Роль зависит от типа элемента интерфейса. Это может быть текст, заголовок окна, пункт меню, полоса прокрутки, кнопка, чекбокс, клиентская область окна и так далее. На основании этих данных вспомогательное устройство принимает решение, каким образом можно взаимодействовать с объектом под курсором и какие данные от него можно ожидать.

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

Программное отключение и подключение монитора

08.11.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter

Программное отключение и подключение монитора

С программным выключением мониторов уже разобрались, сегодня разберем более жесткое действие - отключение. Принципиальную разницу между выключением и отключением, надеюсь, объяснять не надо. Конечно, программно выдернуть видеокабель из системника невозможно, но можно сделать так, чтобы система просто перестала воспринимать этот монитор.

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

Работа с контролом SysTabControl32 на Ассемблере

31.10.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter

Работа с контролом SysTabControl32 на Ассемблере

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

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

Assembler: сейчас на сайте 2 гостей и 3 новостей

27.10.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter
Немного отдохнем от ковыряния во внутренностях системы. Переписал на Ассемблере свою PHP-шную функцию для правильного склонения языковых конструкций вида "число + слово". Всю суть вопроса и теорию можете почитать в статье по ссылке. Сама функция получилась вот такой:
  1. ;-------------------------------------------------------
  2. ; Функция для получения индекса массива с вариантами
  3. ; склонений слова в зависимости от числового значения.
  4. ; Массив слов формируется по принципу "1-2-5", то есть 
  5. ; ("гость", "гостя", "гостей")
  6. ;-------------------------------------------------------
  7. ; На входе: 
  8. ;    dNum - число
  9. ; На выходе: 
  10. ;    EAX = [0..2] - индекс элемента массива
  11. ;-------------------------------------------------------
  12. proc num2word dNum:DWORD
  13.         push    ecx edx
  14.         mov     eax,[dNum]
  15.         cdq
  16.         mov     ecx,100
  17.         idiv    ecx
  18.         cmp     edx,19
  19.         jb      @f
  20.         mov     eax,edx
  21.         cdq
  22.         mov     ecx,10
  23.         idiv    ecx
  24. @@:
  25.         xor     eax,eax
  26.         or      edx,edx
  27.         jz      .case2
  28.         cmp     edx,1
  29.         jz      .case0
  30.         cmp     edx,4
  31.         jbe     .case1
  32. .case2:
  33.         inc     eax
  34. .case1:
  35.         inc     eax
  36. .case0:
  37.         pop     edx ecx
  38.         ret
  39. endp
Единственный параметр на входе - число, для которого надо получить индекс элемента массива. На выходе EAX - искомый индекс от 0 до 2. Примеры использования смотрите в прилагаемом исходнике, там ничего сложного.

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

Как узнать модель и серийный номер монитора

17.10.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter

Как узнать модель и серийный номер монитора

EDID - Extended Display Identification Data - стандарт формата данных VESA, расширенные данные идентификации дисплея. Эта информация передается монитором или телевизором на устройство, которое генерирует видео сигнал. EDID содержит базовую информацию о мониторе и его возможностях, включая информацию о производителе, максимальном размере, цветовых характеристиках, заводских таймингах, границах частотного диапазона и другие технические данные. Кроме этого в EDID записаны строки, содержащие модель монитора и его серийный номер. Вот они-то нас и интересуют.

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

01 ... 05 06 07 08 09 10 11 ... 52
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.12 сек. / MySQL: 3 (0.0471 сек.) / Память: 4.75 Mb
Наверх