Blog. Just Blog

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

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

Исследование защиты программы BurnAware Professional

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

Скриншот программы BurnAware Professional

BurnAware Professional - мультимедийный комбайн для работы с CD и DVD дисками, а также образами дисков. Состоит из набора отдельных специализированных утилит, запускаемых из единой оболочки. Без регистрации работа большинства компонентов ограничена по времени, хотя в принципе очень странно делать платным подобный софт, ведь бесплатных аналогов предостаточно.

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

Запеченная тыква с копченой индейкой

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

Запеченная тыква с копченой индейкой

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

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

Hotkey Helper 1.4

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

Скриншот программы Hotkey Helper

Небольшая программа-помощник для программистов. Показывает коды нажатых клавиш, значения параметров wParam и lParam сообщений WM_KEYDOWN, WM_KEYUP, WM_CHAR, WM_SYSKEYDOWN, WM_SYSKEYUP, WM_UNICHAR, WM_APPCOMMAND (мультимедийные клавиши), WM_DEADCHAR и WM_SYSDEADCHAR (умляуты, акуты, ударения и подобные модификаторы), результаты работы функций GetKeyState и GetAsyncKeyState с переключателями *Lock и клавишами-модификаторами, а также коды горячих клавиш из поля msctls_hotkey32, "сырой" ввод с клавиатуры и информацию о физических устройствах ввода. Предусмотрен режим работы с юникодом и ANSI. Программа написана для личных нужд, но может быть пригодится кому-нибудь еще.

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

Устраняем косяки функций PathRemoveExtension и PathRenameExtension

24.10.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
В комментариях к статьям иногда проскакивают мысли, мол, зачем изобретать велосипед, если уже существуют готовые WinAPI. Ну так вот, в библиотеке shlwapi помимо кучи других полезных функций есть две функции для работы с расширениями файлов. PathRemoveExtension служит для удаления расширения из строки с путем файла, а PathRenameExtension для замены имеющегося расширения на другое. Это очень удобно в случае, когда, например, надо сгенерировать имя файла данных или файла с настройками по имени исполняемого файла. Но, к сожалению, у них есть фатальные косяки в реализации. Это проще показать на примерах. Вот удаление расширения:

c:\test\file1.txt -> PathRemoveExtension -> c:\test\file1
c:\test\file2 -> PathRemoveExtension -> c:\test\file2
c:\test\.htaccess -> PathRemoveExtension -> c:\test\
c:\test\.htaccess.bak -> PathRemoveExtension -> c:\test\.htaccess

И аналогично для замены расширения, например, на ".ini":

c:\test\file1.txt -> PathRenameExtension -> c:\test\file1.ini
c:\test\file2 -> PathRenameExtension -> c:\test\file2.ini
c:\test\.htaccess -> PathRenameExtension -> c:\test\.ini
c:\test\ -> PathRenameExtension -> c:\test\.ini
c:\test\.htaccess.bak -> PathRenameExtension -> c:\test\.htaccess.ini

Как видите, если имя файла начинается с точки и при этом файл не имеет расширения, то обе функции работают неправильно. Кроме этого, функция замены расширения дает неправильный с точки зрения логики результат, если имя файла в строке вообще отсутствует.

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

Как сделать перетаскиваемый курсор-прицел

21.10.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
У многих программ для работы с окнами приложений есть такая фича, как перетаскиваемый указатель-прицел, с помощью которого можно выбрать определенное окно. Когда-то у меня в комментариях спросили, как можно сделать что-то подобное. Что ж, лучше поздно, чем никогда.

Начнем с теории, как это все должно работать. На форме программы сперва рисуется значок прицела, это самая обычная статическая картинка. При клике на нее активируется процесс перетаскивания. Системный курсор меняется на этот же прицел, а значок на форме скрывается. Тем самым достигается визуальный эффект, что перетаскивается именно прицел с формы. Пока кнопка мыши нажата, обрабатываются координаты курсора и выполняются нужные действия с этой информацией. При отпускании кнопки мыши курсор меняется на дефолтный системный, а на форме снова отображается картинка. Таким образом нам надо отслеживать три сообщения окна: WM_LBUTTONDOWN для нажатия левой кнопки мыши, WM_LBUTTONUP для ее отпускания и WM_MOUSEMOVE для перемещения мыши.
  1.         cmp     [msg],WM_LBUTTONDOWN
  2.         je      .wmsetcursor
  3.         cmp     [msg],WM_LBUTTONUP
  4.         je      .wmreleasecursor
  5.         cmp     [msg],WM_MOUSEMOVE
  6.         je      .wmmousemove
Теперь разберем каждый обработчик более подробно. При нажатии левой кнопки мыши сперва проверяется координата, по которой было произведено нажатие. Если она находится внутри области, занимаемой картинкой прицела на форме, то загружается курсор, прячется картинка, как написано выше.
  1. .wmsetcursor:
  2.         ; Получить координаты события
  3.         invoke  GetMessagePos
  4.         ; Координата Y
  5.         mov     ebx,eax
  6.         shr     ebx,16
  7.         mov     [pt.y],ebx
  8.         ; Координата X
  9.         mov     ebx,eax
  10.         and     ebx,0FFFFh
  11.         mov     [pt.x],ebx
  12.  
  13.         ; Получить границы иконки
  14.         invoke  GetWindowRect,[hStatic],img
  15.  
  16.         ; Клик произошел в области иконки?
  17.         invoke  PtInRect,img,[pt.x],[pt.y]
  18.         or      eax,eax
  19.         jz      .processed
  20.  
  21.         ; Установить захват событий мыши
  22.         invoke  SetCapture,[hwnddlg]
  23.  
  24.         ; Загрузить наш курсор
  25.         invoke  SetCursor,[hCursor]
  26.  
  27.         ; Скрыть иконку на форме
  28.         invoke  SendMessage,[hStatic],STM_SETIMAGE,IMAGE_CURSOR,0
  29.  
  30.         mov     [state],1
Но главное, надо обязательно установить захват мыши для окна программы при помощи функции SetCapture. Иначе события перемещения перестанут передаваться, как только курсор покинет пределы окна. Также надо взвести флаг, что теперь выполняется перемещение прицела.

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

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