
Быстрый поиск
Введите фрагмент названия статьи для поиска
Как поменять стандартную иконку любой папки Windows
20.10.2013 | Категория: Software | Автор: ManHunter

Папки с измененными иконками
В Windows есть возможность поменять стандартную иконку папки на любую другую. Это бывает удобно, когда папок много и надо выделить некоторые для более быстрого визуального поиска, или если старые значки вам уже надоели. Еще некоторые приложения любят менять значки на папках, в которые они установлены. Информация о том, как поменять иконку, не является каким-то секретом, кое-кто даже налепил для этого целые многомегабайтные программы, причем некоторые из них даже платные. А вот вам и моя инструкция для новичков и продвинутых пользователей.
Читать статью целиком »
Просмотров: 18365 | Комментариев: 3
Получение иконки из окна чужого приложения
23.07.2012 | Категория: Образ мышления: Assembler | Автор: ManHunter
В некоторых приложениях, например, в различных таскменеджерах, возникает задача получить иконку окна другого приложения, чтобы затем использовать ее в своем контексте. Делается это очень просто. Окну посылается сообщение WM_GETICON с параметром ICON_SMALL или ICON_BIG, в зависимости от того, маленькую или большую иконку надо получить. Если это не срабатывает, то можно попробовать получить иконку при помощи функции GetClassLong, соответственно, с параметром GCL_HICONSM или GCL_HICON. Если и в этом случае хэндл иконки получить не удалось, то значит не судьба. Или приложение, которому принадлежит окно, не отвечает, или же окно просто не имеет иконки. Для облегчения задачи я написал следующую функцию:Code (Assembler) : Убрать нумерацию
- ;--------------------------------------------------------------
- ; Функция получения иконки окна
- ; by ManHunter / PCL
- ; http://www.manhunter.ru
- ;--------------------------------------------------------------
- ; Параметры:
- ; hwnd - хэндл окна
- ; dType - тип иконки (0 - 16x16, 1 - 32x32)
- ; На выходе:
- ; EAX - хэндл иконки или -1 если окна не существует
- ;--------------------------------------------------------------
- proc GetIcon hwnd:DWORD, dType:DWORD
- pusha
- ; Такое окно существует?
- invoke IsWindow,[hwnd]
- or eax,eax
- jnz @f
- ; Окно не найдено
- mov eax,-1
- jmp .loc_ret
- @@:
- ; Какую иконку надо получить?
- cmp [dType],0
- jne .get_big_icon
- ; Получить хэндл маленькой иконки
- .get_small_icon:
- invoke SendMessage,[hwnd],WM_GETICON,ICON_SMALL,0
- or eax,eax
- jnz .loc_ret
- invoke GetClassLong,[hwnd],GCL_HICONSM
- or eax,eax
- jnz .loc_ret
- jmp .load_def
- ; Получить хэндл большой иконки
- .get_big_icon:
- invoke SendMessage,[hwnd],WM_GETICON,ICON_BIG,0
- or eax,eax
- jnz .loc_ret
- invoke GetClassLong,[hwnd],GCL_HICON
- or eax,eax
- jnz .loc_ret
- ; Получить хэндл иконки по умолчанию
- .load_def:
- invoke LoadIcon,NULL,IDI_WINLOGO
- .loc_ret:
- mov [dType],eax
- popa
- ; Вернуть результат
- mov eax,[dType]
- ret
- endp
Читать статью целиком »
Просмотров: 5256 | Комментариев: 3
Замена главной иконки браузера Firefox
15.07.2012 | Категория: Software | Автор: ManHunter

Замена главной иконки браузера Firefox
Сегодня я познакомлю вас с еще одной настройкой браузера Firefox. Оказывается, можно поменять его иконку на любую другую, при этом даже не придется ковыряться во внутренностях исполняемого файла редакторами ресурсов. Зайдите через Проводник или любой файловый менеджер в папку с установленным браузером и проверьте наличие в ней подпапки "\chrome\icons\default". Туда складывают иконки различные расширения браузера, поэтому не исключено, что такая папка на диске уже есть. Если нет, то создайте ее. Папка "chrome" обязательно должна быть, поэтому сперва в ней создайте папку "icons", а затем уже в ней папку "default". В итоге должно получиться что-то наподобие такого пути:
C:\Program Files\Mozilla Firefox\chrome\icons\default\Теперь идем на сайт с бесплатными иконками, выбираем нужную и сохраняем ее с расширением ico. Дальше переименовываем файл иконки в main-window.ico и переносим его в созданную папку "default". Все, осталось быстренько перезапустить браузер и, если все сделано правильно, наслаждаться результатами. Поддерживаются не только обычные, но и мультииконки (когда в одном файле содержатся иконки разных размеров). После замены иконки браузер можно переустанавливать, обновлять, делать с ним что угодно, новая иконка будет подгружаться до тех пор, пока файл main-window.ico будет находиться на месте.
Читать статью целиком »
Просмотров: 18050 | Комментариев: 17
Принудительное обновление иконок в трее
12.01.2012 | Категория: Образ мышления: Assembler | Автор: ManHunter
В случае аварийного завершения или некорректной работы некоторых приложений, в системном трее могут оставаться "мертвые" иконки, которые уже не принадлежат ни одному запущенному процессу. Глюк хоть и не смертельный, но все равно неприятный. И основная проблема в том, что область трея никак не реагирует на внешние сообщения типа WM_REPAINT, и функции типа UpdateWindow и InvalidateRect. То есть автоматически обновить или перерисовать его, чтобы избавиться от "мертвых" иконок, не получится. Но такие иконки удаляются, если провести курсором мышки над ними. Значит единственный способ перерисовать иконки в трее - это сэмулировать движение мыши над окном трея. Как найти окно трея и его хэндл мы уже знаем, тут ничего нового. В сегменте данных те же значения:Code (Assembler) : Убрать нумерацию
- ; Сегмент данных
- section '.data' data readable writeable
- class1 db 'Shell_TrayWnd',0 ; Название класса окна трея
- class2 db 'TrayNotifyWnd',0 ; Название класса панели уведомлений
- class3 db 'SysPager',0 ; Трей
- class4 db 'ToolbarWindow32',0 ; Панель с иконками
- ToolbarHandle dd ? ; Хэндл окна трея
- ToolbarRect RECT ; Размер окна трея
Code (Assembler) : Убрать нумерацию
- ; Найти окно трея
- invoke FindWindow,class1,NULL
- or eax,eax
- jz exit_process
- ; Найти панель уведомлений
- invoke FindWindowEx,eax,NULL,class2,NULL
- or eax,eax
- jz exit_process
- ; Найти трей
- invoke FindWindowEx,eax,NULL,class3,NULL
- or eax,eax
- jz exit_process
- ; Найти панель иконок в трее
- invoke FindWindowEx,eax,NULL,class4,NULL
- or eax,eax
- jz exit_process
- ; Сохранить хэндл окна с иконками
- mov [ToolbarHandle],eax
Читать статью целиком »
Просмотров: 9370 | Комментариев: 21
Получение списка иконок в трее
18.07.2010 | Категория: Образ мышления: Assembler | Автор: ManHunter
Иногда приложению требуется получить список иконок, находящихся в трее, а также список приложений, которые их туда разместили. Это может быть нужно для обнаружения некоторых скрывающихся приложений, для эмуляции кликов на иконках, ну или просто для спортивного интереса. В любом случае для получения списка иконок надо сделать следующее: найти в трее панель с иконками, при помощи сообщения TB_BUTTONCOUNT получить количество иконок, а затем через отправку сообщения TB_GETBUTTON получить всю необходимую информацию по каждой иконке. Теперь рассмотрим все шаги подробнее.Работать с вложенными окнами трея мы уже умеем, здесь практически то же самое, разница только в названиях классов дочерних окон.
Code (Assembler) : Убрать нумерацию
- ; Сегмент данных
- section '.data' data readable writeable
- ...
- class1 db 'Shell_TrayWnd',0 ; Название класса окна трея
- class2 db 'TrayNotifyWnd',0 ; Название класса панели уведомлений
- class3 db 'SysPager',0 ; Трей
- class4 db 'ToolbarWindow32',0 ; Панель с иконками
- ToolbarHandle dd ? ; Хэндл окна с иконками
- ...
- ; Сегмент кода
- section '.code' code readable executable
- ...
- ; Найти окно трея
- invoke FindWindow,class1,NULL
- or eax,eax
- jz exit_process
- ; Найти панель уведомлений
- invoke FindWindowEx,eax,NULL,class2,NULL
- or eax,eax
- jz exit_process
- ; Найти трей
- invoke FindWindowEx,eax,NULL,class3,NULL
- or eax,eax
- jz exit_process
- ; Найти панель иконок в трее
- invoke FindWindowEx,eax,NULL,class4,NULL
- or eax,eax
- jz exit_process
- ; Сохранить хэндл окна с иконками
- mov [ToolbarHandle],eax
- ...
Code (Assembler) : Убрать нумерацию
- ; Получить количество иконок в трее
- invoke SendMessage,eax,TB_BUTTONCOUNT,0,0
- or eax,eax
- jz exit_process
- ; Сохранить количество иконок в трее
- mov [IconsCount],eax
Читать статью целиком »
Просмотров: 9494 | Комментариев: 9

