Blog. Just Blog

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

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

My Music Web Agent 1.5

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

Скриншот программы My Music Web Agent

Сейчас существует большое количество программ и плагинов, которые получают название музыкального трека из плеера на вашем компьютере. Они устанавливают это название, например, в качестве статуса в интернет-мессенджерах, в редакторах сообщений социальных сетей и т.п. В отличие от таких программ, My Music Web Agent предназначен для передачи названия трека на заданный URL в интернете, чтобы вы, например, могли показывать его на своем сайте. После запуска My Music Web Agent показывает значок в трее. Клик левой кнопкой мыши - включить/выключить отправку данных в интернет, правая кнопка мыши - меню, где можно посмотреть информацию о версии программы, выбрать плееры и включить/выключить режим автозагрузки. Клик колесиком мыши - переход на следующий трек (только для Winamp-совместимых плееров). Вращение колесика над иконкой - изменение громкости Winamp-совместимых плееров, вращение колесика с зажатой клавишей Shift - изменение общей громкости системы.

Пример скрипта-приемника на PHP находится в папке upload. Настройки My Music Web Agent хранятся в файле mmwa.ini, там же есть подробное описание каждого параметра. Пока поддерживаются плееры Winamp, AIMP, Apollo, foobar2000 с установленным плагином foo_winamp_spam, KMPlayer, Trout, 1by1, GOM Player, Daum PotPlayer, Xion Player, XMPlay, Media Player Classic, Light Alloy, Spider Player, JetAudio, Zoom Player. Возможно, позднее добавятся и другие плееры.

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

Исследование защиты программы Мир банкнот

18.11.2021 | Категория: Темная сторона Силы | Автор: ManHunter

Скриншот программы Мир банкнот

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

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

Управление громкостью звука в системе

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

Управление громкостью звука в системе

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

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

Овощное рагу с брюссельской капустой

14.11.2021 | Категория: А еще я туда ем! | Автор: ManHunter

Овощное рагу с брюссельской капустой

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

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

Обработка колесика мыши над иконкой в трее

12.11.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
"По следам наших публикаций", как любили писать в советской прессе. В предыдущей статье я обещал рассказать, каким образом можно реализовать обработку вращения колесика мыши над иконкой в системном трее. Поскольку система не отправляет иконкам в трее сообщение WM_MOUSEWHEEL, обрабатывать его мы будем при помощи хуков и описанных в предыдущей статье методов определения, что курсор находится над нужной иконкой. Начнем с локального хука. Установка и снятие хука выполняется самым обычным способом, например:
  1. proc DialogProc hwnddlg,msg,wparam,lparam
  2.         push    ebx esi edi
  3.         cmp     [msg],WM_INITDIALOG
  4.         je      .wminitdialog
  5.         cmp     [msg],WM_CLOSE
  6.         je      .wmclose
  7.         ...
  8.         ...
  9.         xor     eax,eax
  10.         jmp     .finish
  11.  
  12. .wminitdialog:
  13.         ...
  14.         ...
  15.         ; Показать иконку в трее
  16.         invoke  Shell_NotifyIcon, NIM_ADD,node
  17.  
  18.         ; Установить обработчик мыши
  19.         invoke  GetCurrentThreadId
  20.         invoke  SetWindowsHookEx,WH_MOUSE,MousewheelProc,NULL,eax
  21.         mov     [hhkm],eax
  22.  
  23.         mov     eax,[hwnddlg]
  24.         mov     [hwmain],eax
  25.         jmp     .processed
  26.  
  27.         ...
  28.         ...
  29. .wmclose:
  30.         ; Снять обработчик мыши
  31.         invoke  UnhookWindowsHookEx,[hhkm]
  32.         ; Удалить иконку из трея
  33.         invoke  Shell_NotifyIcon,NIM_DELETE,node
  34.  
  35.         ; Закрыть окно
  36.         invoke  EndDialog,[hwnddlg],0
  37. .processed:
  38.         mov     eax,1
  39. .finish:
  40.         pop     edi esi ebx
  41.         ret
  42. endp
Обработчик событий мыши проверяет, что пришло сообщение WM_MOUSEWHEEL и что курсор в текущий момент находится над нужной иконкой в трее. Если эти условия выполнены, то проверяется направление вращения колесика и, в зависимости от этого, выполняются те или иные действия. Имейте в виду, что для сообщения WM_MOUSEWHEEL в обработчик хука приходит структура не MOUSEHOOKSTRUCT, а MOUSEHOOKSTRUCTEX с дополнительным полем mouseData.
  1. ; Структура для обработчика хука
  2. struct MOUSEHOOKSTRUCTEX
  3.         pt           POINT
  4.         hwnd         dd ?
  5.         wHitTestCode dd ?
  6.         dwExtraInfo  dd ?
  7.         mouseData    dd ?
  8. ends
  9.  
  10. ;-------------------------------------------------------------
  11. ; Обработка mousewheel
  12. ;-------------------------------------------------------------
  13. proc MousewheelProc nCode:dword,wParam:dword,lParam:dword
  14.         pusha
  15.  
  16.         cmp     [nCode],0
  17.         jl      .loc_ret
  18.  
  19.         ; Это сообщение от колеса мыши?
  20.         cmp     [wParam],WM_MOUSEWHEEL
  21.         jne     .loc_ret
  22.  
  23.         ; Заполнить структуру для идентификации иконки
  24.         mov     [notify.cbSize],sizeof.NOTIFYICONIDENTIFIER
  25.         mov     eax,[hwmain]
  26.         mov     [notify.hWnd],eax
  27.         mov     [notify.uID],ICON_ID
  28.  
  29.         ; Получить координаты иконки в трее
  30.         invoke  Shell_NotifyIconGetRect,notify,rc
  31.  
  32.         ; Указатель на MOUSEHOOKSTRUCT
  33.         mov     ebx,[lParam]
  34.  
  35.         ; Курсор находится внутри прямоугольника иконки?
  36.         invoke  PtInRect,rc,[ebx+MOUSEHOOKSTRUCTEX.pt.x],\
  37.                 [ebx+MOUSEHOOKSTRUCTEX.pt.y]
  38.         or      eax,eax
  39.         ; Нет, ничего не делать
  40.         jz      .loc_ret
  41.  
  42.         ; Проверить направление поворота колесика
  43.         mov     eax,[ebx+MOUSEHOOKSTRUCTEX.mouseData]
  44.         or      eax,eax
  45.         js      .loc_down
  46. .loc_up:
  47.         ; Вращение вверх
  48.         ...
  49.         ...
  50.         jmp     .loc_ret
  51. .loc_down:
  52.         ; Вращение вниз
  53.         ...
  54.         ...
  55.  
  56. .loc_ret:
  57.         popa
  58.         invoke  CallNextHookEx,[hhkm],[nCode],[wParam],[lParam]
  59.         ret
  60. endp
Способ замечательно работает, но есть одно большое "НО". Локальный хук будет срабатывать только в том случае, когда активно окно приложения. Если ваше приложение подразумевает именно такой принцип работы, то все нормально, больше ничего придумывать не надо.

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

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