Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Оформление Windows XP (http://forum.oszone.net/forumdisplay.php?f=114)
-   -   LogonUI - изменение размеров аватаров (http://forum.oszone.net/showthread.php?t=130516)

Boa Soft 31-01-2009 20:00 1025613

LogonUI - изменение размеров аватаров
 
Вложений: 1
В интернете очень много интересных модифицированных экранов приветствия (logonUI.exe). Многие авторы кардинально меняют дизайн экрана, и делают размер аватарок большим, по подобию висты. Но, вот беда - размер подложки (PictureFrame) изменить можно, а самой аватарки юзьверя - нет. Она всегда 48 на 48 точек. Поэтому, в этих логонах аватарки не отображаются, а на подложке нарисована жеско заданная аватарка. Она будет едина для всех пользователей. Что не очень красиво.

Найдя красивый логон http://raulwindows.deviantart.com/ar...3-10-111322984 я решил его доработать. После основных доработок ресурсов я покопался IDA в его потрошках. И, вот что получилось:


Картинки отображаются реально размером 96х96 точек :).

Для этого необходимо пропатчить в 3 местах процедуру LogonAccount__OnTreeReady:


Код:

.text:01009948                push    24h           ; nNumber
.text:0100994A                call    ?PointToPixel@LogonFrame@@SGHH@Z ; LogonFrame::PointToPixel(int)


.text:010099CB                push    24h             ; nNumber
.text:010099CD                call    ?PointToPixel@LogonFrame@@SGHH@Z ; LogonFrame::PointToPixel(int)
.text:010099D2                push    eax            ; __int16
.text:010099D3                push    24h            ; nNumber
.text:010099D5                call    ?PointToPixel@LogonFrame@@SGHH@Z ; LogonFrame::PointToPixel(int)

Здесь размер аватарки задается в внутренних модулях. 24h соответствует 48 пикселям. 48h - 96 пикселям. Т.е. 1 модуль примерно равен 1.333 пикселя.

Первое вхождение задает размер, когда аватарка грузится из bmp картинки, вторые два - когда невозможно загрузить картинку и загрузка идет из внутреннего ресурса №114.

Для патча нам надо в любом HEX - редакторе открыть LogonUI и найти и заменить следующее (3 вхождения):

Код:

6A 24 E8 -> 6A 48 E8
Внимание! Патчим только первые 3 вхождения. 4 не трогаем!

После сохранения файла проверяем, что теперь у нас тарки размером 96x96!


Но, иметься только проблема, даже две:

1. Менеджер учетных записей всегда создает картинки 48x48
2. При отсутствии картинки logonui сам создает какртинку тоже 48x48.

Ищем далее. Искомая функция сидит уже не в LogonUI а в Shell32.dll - без имени, №324.

В ее подпрограмме находим:

Код:

.text:7CAD3F3F                jmp    short loc_7CAD3F46
.text:7CAD3F41 ; ---------------------------------------------------------------------------
.text:7CAD3F41
.text:7CAD3F41 loc_7CAD3F41:                          ; CODE XREF: sub_7CAD3EAA+6Cj
.text:7CAD3F41                push    30h

Тут уже будет просто в точках:

Для патча нам надо в любом HEX - редакторе открыть Shell32.dllи найти и заменить следующее (1 вхождениу):

Код:

EB 05 6A 30 5F 8B ->  EB 00 6A 60 5F 8B
Первый байт отключает вычисления размера модуля, а второй сразу задает размер в 96пикселей.

После подмены shell32 на патченную и перезагрузки аватарки создаются 96 px.

Только следует учесть, что эта функция только уменьшает картинки. Если же картинка была менее 96 пикселей, то такой она и останется.
Но, это не страшно - logonUi сам растянет при отображении до 96x96 точек.


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

Пример логона во вложении. Shell32 пропатчте при необходимости сами.

PS За основу был взят экран Logon User Interface created by RaulWindows.deviantart.com, правда тут от исходного мало чего осталось. Но, так что, если захотите включить в какие-либо публичные пакеты/сборки, желательно испросить разрешения у автора.

Так же хинт для отладки логона. Если неправильно что-то сделать, то после проверки по Win-L может не отобразится сам аккоунт. И войти обратно невозможно.

Завершаем работу с перезагрузкой и после загрузки до логона удерживая ctrl-alt жмем два раза del. В окне классического входа вводим имя и пароль и попадаем в виндовс.

Чтобы не повторять ошибку, запускаем любой сторонний менеджер, закрываем процесс explorer.exe и запускаем logonui. И. видим, как все отображается. LogonUI можно только прибить из менеджера процессов. Почему надо убивать проводник - потому, что LogonUI проверяет его запущенность.


Время: 23:22.

Время: 23:22.
© OSzone.net 2001-