Blog. Just Blog

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

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

Использование иконок разных размеров в ресурсах

12.02.2009 | Категория: Образ мышления: Assembler | Автор: ManHunter
Большим плюсом Flat Assembler является то, что при разработке создается минимальное количество файлов. Описания ресурсов хранятся прямо в исходнике ASM, что тоже очень удобно. Например, в официальной документации и исходниках описание главной иконки в ресурсах исполняемого файла выглядит примерно так:
  1. section '.rsrc' resource data readable
  2.  
  3.   directory RT_ICON, icons,\
  4.             RT_GROUP_ICON, group_icons
  5.  
  6.   resource icons,\
  7.            1, LANG_NEUTRAL, icon_data
  8.  
  9.   resource group_icons,\
  10.            1, LANG_NEUTRAL, main_icon
  11.  
  12.   ; Описание одиночной иконки
  13.   icon main_icon, icon_data, 'main_icon.ico'
Проблема в том, что одиночной иконки в приложениях часто бывает недостаточно. Система Windows в разных ситуациях отображает разные иконки файлов. Например, при просмотре папки Проводником в режиме "Таблица" или "Значки" иконки исполняемых файлов будут разного размера. Если в исполняемом файле только одна маленькая иконка, то она будет растянута до нужного размера. Аналогично, при компактном режиме просмотра одиночная большая иконка будет сжата. Качество изображения после масштабирования в большинстве случаев оставляет желать лучшего. После усиленных поисков было найдено такое вот простое, но неочевидное решение. Почему оно не описано в документации и не реализовано ни в одном примере, непонятно. Создаете несколько файлов иконок нужных размеров и описываете их в ресурсах следующим образом:
  1. section '.rsrc' resource data readable
  2.  
  3.   directory RT_ICON, icons,\
  4.             RT_GROUP_ICON, group_icons
  5.  
  6.   resource icons,\
  7.            1, LANG_NEUTRAL, icon_data1,\
  8.            2, LANG_NEUTRAL, icon_data2,\
  9.            3, LANG_NEUTRAL, icon_data3
  10.  
  11.   resource group_icons,\
  12.            1, LANG_NEUTRAL, main_icon
  13.  
  14.   ; Описание иконок разных размеров, объединенных в одну
  15.   icon main_icon,\
  16.            icon_data1, 'icon_16x16_32bit.ico',\
  17.            icon_data2, 'icon_32x32_32bit.ico',\
  18.            icon_data3, 'icon_48x48_32bit.ico'
Теперь наше приложение будет красиво отображаться в разных режимах просмотра. Количество иконок не ограничено, и вы можете использовать даже монохромные или 16-цветные иконки. Но лично я считаю, что для программ на Ассемблере вполне достаточно двух полноцветных иконок размерами 16х16 и 32х32 пикселов.

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

Готовим домашнюю шаурму

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

Готовим домашнюю шаурму

Очень люблю это блюдо, особенно правильно приготовленное. То недоразумение, которое продается в ларьках на вокзале, не имеет никакого отношения к шаурме. Поэтому сегодня я буду готовить домашнюю шаурму по оригинальному рецепту, которому меня научили на Кавказе. Итак, точим ножик и вперед!

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

Программное выключение монитора

08.02.2009 | Категория: Образ мышления: Assembler | Автор: ManHunter
Выключить монитор из программы можно, но только если он совместим со стандартом EnergyStar. Об этом можно не беспокоиться, все современные мониторы удовлетворяют этому условию. Беспокоиться надо о другом. По непонятной причине с сайта на сайт упорно копируют один и тот же код на разных языках программирования, который якобы должен выключить монитор. Вот его вариант на Ассемблере:
  1. ; ВНИМАНИЕ! Это НЕПРАВИЛЬНЫЙ код!!!
  2. invoke  GetDesktopWindow
  3. invoke  SendMessage, eax, WM_SYSCOMMAND, SC_MONITORPOWER, 0
Во-первых, через хэндл из функции GetDesktopWindow достучаться до монитора не получится, причем ни в обычном Explorer'e, ни в альтернативных шеллах типа Aston Desktop. Чтобы сообщение дошло до нужного адресата, надо использовать широковещательную рассылку через HWND_BROADCAST. Во-вторых, непонятно откуда взялся последний параметр - 0. В MSDN четко прописано, что для выключения монитора через SC_MONITORPOWER значение lParam должно быть равно 2. Более того, нулевого значения параметра для этого сообщения вообще не предусмотрено. В двух строчках кода две принципиальные ошибки! И это уже далеко не первый случай, когда код из различных популярных источников является заведомо нерабочим. Всем любителям бездумного копипаста очень рекомендую сперва сверяться с первоисточниками, а перед публикацией проверять весь код на практике.

Но хватит о грустном. Правильный код программного выключения монитора будет таким:
  1. ;-------------------------------------------------
  2. ; Правильный код выключения монитора
  3. ;-------------------------------------------------
  4. ; В FASM не определена константа HWND_BROADCAST, сделаем это самостоятельно
  5. HWND_BROADCAST = 0FFFFh
  6. ; Выключить монитор
  7. invoke  SendMessage, HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2
Для включения монитора обратно достаточно пошевелить мышкой или нажать любую кнопку на клавиатуре. А можно также сделать это из нашей программы. У копипастеров этот код также содержит ошибку, потому что для включения монитора значение lParam должно быть равно -1, а не 1.

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

Парсер REFERER'ов с поисковых систем

04.02.2009 | Категория: Web-мастеру и не только | Автор: ManHunter
Обработка заголовка HTTP referer является одной из важных задач при раскрутке сайта и сборе статистики. По нему можно определить, какие ресурсы ссылаются на ваш сайт. Но особую ценность представляют данные посещений с поисковых систем, так как эта информация позволяет наиболее четко определить, по каким ключевым словам ваш сайт может быть найден, а также проанализировать эффективность поисковой оптимизации вашего ресурса. Если вы пользуетесь сторонними счетчиками посещений, то эту информацию они обычно предоставляют сами. В некоторых случаях такие данные предоставляют серверные системы статистики типа Webalizer. Я принципиально не пользуюсь ни тем, ни другим, обрабатываю все данные самостоятельно. Для этого была написана функция обработки рефереров, которую я использую в своих проектах. Данные поискового запроса обычно передаются методом GET и содержатся в строке браузера, но основная проблема в том, что кодировка этих данных может быть разной даже в пределах одной и той же поисковой системы. Как выяснилось, не везде доступна штатная функция PHP is_unicode(), поэтому для подстраховки пришлось написать свою. Проверка выполняется согласно правилам формирования Юникода.
  1. // Функция проверки является ли переменная строкой в Юникоде 
  2. // Если штатная функция не определена, то применить нашу
  3. if (!function_exists('is_unicode')) {
  4.   function is_unicode($str) {
  5.     for ($i=0$i<strlen($str); $i++) {
  6.       // Если символ с кодом больше 191, то возможно это юникод
  7.       if (ord($str[$i])>191) {
  8.         // Следующий символ должен быть в интервале
  9.         // 10000000b ... 10111111b (128...191)
  10.         if (ord($str[($i+1)])<128 || ord($str[($i+1)])>191) {
  11.           // Условие не выполнено, значит это не юникод
  12.           return false;
  13.         }
  14.         else {
  15.           // Пропускаем один байт, т.к. он является частью символа
  16.           $i++;
  17.         }
  18.       }
  19.     }
  20.     // Проверка пройдена, это юникод
  21.     return true;
  22.   }
  23. }
Теперь, когда мы можем четко определить кодировку строки запроса, нам необходимо выделить ее из строки URL. Для этого достаточно выполнить в интересуемом поисковике любой запрос и посмотреть как формируется ссылка.

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

Программы для создания патчей и лоадеров

02.02.2009 | Категория: Темная сторона Силы | Автор: ManHunter
Итак, защита успешно сломана, коммерческая программа перестала требовать денег и зарегистрирована на ваше имя. Теперь надо обязательно поделиться результатами своих трудов со всем миром! Для релиза вам может понадобиться патч, вносящий нужные изменения в файлы. Если есть время и желание, то можно написать свой, а можно воспользоваться готовыми программами для создания патчей и лоадеров. Рассмотрим некоторые из них.


Скриншот программы diablo2oo2's Universal Patcher

diablo2oo2's Universal Patcher. Бесспорный лидер среди программ для создания патчей. Написан полностью на Ассемблере, последняя версия на сегодняшний день 2.18, а промежуточные бета-версии можно время от времени проверять по прямой ссылке. Позволяет делать если не все, то очень многое: статичные и универсальные патчи, самообучающиеся лоадеры, inline-патчи для упакованных файлов, патчи реестра, запись на диск прикрепленных к патчу файлов и еще многое другое. В умелых руках dUP2 будет очень мощным инструментом. Создаваемые патчи можно дополнять трекерной музыкой в формате xm, mod, it, s3m, mtm, umx, v2m, ahx и sid, оформлять собственными скинами, в том числе и нестандартной формы, устанавливать прозрачность окна и менять главную иконку патча. Интерфейс и документация на английском языке. Отечественными умельцами для патчера написан русификатор, но в официальном комплекте его, к сожалению, нет.

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

01 ... 357 358 359 360 361 362 363 ... 373
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2023
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.11 сек. / MySQL: 2 (0.0376 сек.) / Память: 4.75 Mb
Наверх