Blog. Just Blog

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

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

Как получить список подсказок у иконок в трее

23.01.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter
Сегодня снова будем издеваться над треем. На этот раз для доступа к данным в трее будем использовать средства интерфейса IAccessible, ранее мы его уже применяли, но немного для других задач.

Структуры, константы, интерфейсы и все остальное уже расписано в статье по ссылке выше, дублировать не буду. Как пройтись по иерархии окон Проводника и получить хэндл трея с иконками тут тоже было немало примеров. Переходим к основной части.
  1.         ; Получить информацию о выбранном элементе
  2.         ; [hTray] - хэндл окна трея с иконками
  3.         invoke  AccessibleObjectFromWindow,[hTray],OBJID_CLIENT,\
  4.                 CLSID_IAccessible,pAcc
  5.  
  6.         ; Количество элементов в окне
  7.         mov     eax,[pAcc]
  8.         mov     eax,[eax]
  9.         stdcall dword [eax+IAccessible.get_accChildCount],[pAcc],tmp
  10.  
  11.         invoke  wsprintf,buff,mask1,[tmp]
  12.         add     esp,12
  13.         stdcall AddLog,[hwmain],ID_LOG,buff
  14.  
  15.         ; Начинаем перебирать с 1 элемента
  16.         mov     ebx,1
  17. loc_loop:
  18.         ; Выделить память под строку
  19.         invoke  SysAllocString,szNull
  20.         mov     [bstrName],eax
  21.  
  22.         ; Получить название выбранного элемента
  23.         push    [bstrName]
  24.         mov     [varChild.vt],VT_I4
  25.         mov     [varChild.lVal],ebx
  26.         mov     eax,varChild
  27.         push    dword [eax+0Ch]
  28.         push    dword [eax+08h]
  29.         push    dword [eax+04h]
  30.         push    dword [eax]
  31.         mov     eax,[pAcc]
  32.         mov     eax,[eax]
  33.         stdcall dword [eax+IAccessible.get_accName],[pAcc]
  34.  
  35.         ; Строка подсказки
  36.         mov     eax,[bstrName]
  37.         mov     eax,[eax]
  38.         ; EAX -> строка подсказки
  39.  
  40.         ; Прибраться за собой
  41.         invoke  SysFreeString,[bstrName]
  42.  
  43.         ; Следующий элемент
  44.         inc     ebx
  45.         cmp     ebx,[tmp]
  46.         jbe     loc_loop
  47.  
  48.         ; Прибраться за собой
  49.         mov     eax,[pAcc]
  50.         mov     eax,[eax]
  51.         stdcall dword [eax+IAccessible.Release],[pAcc]
С помощью функции AccessibleObjectFromWindow получаем интерфейс IAccessible для окна трея. С помощью метода get_accChildCount определяем количество дочерних элементов окна, они же иконки в трее, в том числе и скрытые. С помощью метода get_accName получаем текстовые строки с подсказками для каждого элемента, начиная с 1-го. Нулевому элементу соответствует само окно трея.

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

Как узнать локальный IP-адрес компьютера

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

Как узнать локальный IP-адрес компьютера

Очередной небольшой сниппет, который может пригодиться в работе. Получение IP-адреса компьютера, на котором запущено приложение. Обратите внимание, что это будет локальный адрес, например, который прописан на роутере.

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

Распаковка данных в формате LZRW1 на Ассемблере

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

Распаковка данных в формате LZRW1 на Ассемблере

Алгоритм компрессии LZRW1 был создан в далеких 90-х годах Ross N. Williams на базе оригинальных алгоритмов серии LZ77. Основной упор при разработке был сделан на максимальную скорость обработки данных, но при этом пришлось пожертвовать степенью сжатия. И действительно, по качеству сжатия LZRW1 недалеко ушел от LZ77, зато даже большие файлы упаковывает буквально за доли секунды.

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

Windows Error Codes Helper 1.1

18.12.2023 | Категория: Мои программы | Автор: ManHunter

Сериншот программы Windows Error Codes Helper

Программа-справочник кодов и описаний ошибок Windows. Всего в базе содержится около 30.000 кодов ошибок, собранных из различных источников: ошибки обновления, коды возврата системных API, коды завершения операций, числовые коды статусов событий и т.п. Большинство ошибок имеют текстовое описание, но даже если описания нет, по названию константы с кодом ошибки можно достаточно точно определить ее источник. Кроме готовой базы программа дополнительно пытается запрашивать описание ошибки через системные функции или из выбранной динамической библиотеки.

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

Распаковка данных в формате LZF на Ассемблере

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

Распаковка данных в формате LZF на Ассемблере

Первоначально алгоритм компрессии LZF был разработан Marc Lehmann, но в последующем был немного оптимизирован и облегчен Ильей Муравьевым. По степени сжатия находится в одном ряду с LZE и LZ4, а по скорости упаковки и распаковки показывает просто отличные результаты. При этом основная оптимизация сжатия достигается при упаковке текстовых данных.

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

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