切换到宽版
  • 2869阅读
  • 0回复

关于修改 WinRAR 3.90 默认主题工具栏图标尺寸的方法 [复制链接]

上一主题 下一主题
离线owen
 

只看楼主 倒序阅读 0 发表于: 2009-11-08
喜欢修改 WinRAR 默认主题的朋友应该都尝试过修改 WinRAR 主程序,使其支持 48×48、32×32 尺寸的工具栏图标显示。但 WinRAR 更新到 3.90 版本后,由于使用了更新的编译器编译,导致之前版本的修改经验失效,原来的搜索特征已经找不到了。看到一些网友正为此而困惑,于是分析了一下新版本,发现了蛛丝马迹,特与大家分享下心得。

以下是OllyDbg中的部分关键反汇编代码:

【主界面工具栏调整】:

004695E0    81EC 80060000       sub esp,680
004695E6    A1 90034C00         mov eax,dword ptr ds:[4C0390]
004695EB    33C4                xor eax,esp
004695ED    898424 7C060000     mov dword ptr ss:[esp+67C],eax
004695F4    53                  push ebx
004695F5    8BD9                mov ebx,ecx
004695F7    8B03                mov eax,dword ptr ds:[ebx]
004695F9    85C0                test eax,eax
004695FB    74 0D               je short WinRAR.0046960A
004695FD    50                  push eax
004695FE    FF15 AC154B00       call dword ptr ds:[<&USER32.DestroyWindow>]    ; USER32.DestroyWindow
00469604    C703 00000000       mov dword ptr ds:[ebx],0
0046960A    6A 01               push 1
0046960C    68 04434B00         push WinRAR.004B4304                           ; ASCII "ViewMain"
00469611    68 C0174B00         push WinRAR.004B17C0                           ; ASCII "General\Toolbar"
00469616    E8 45D3FEFF         call WinRAR.00456960
0046961B    85C0                test eax,eax
0046961D    0F84 1F040000       je WinRAR.00469A42
00469623    6A 01               push 1
00469625    68 50204B00         push WinRAR.004B2050                           ; ASCII "LargeButtons"
0046962A    68 C0174B00         push WinRAR.004B17C0                           ; ASCII "General\Toolbar"
0046962F    E8 2CD3FEFF         call WinRAR.00456960
00469634    6A 01               push 1
00469636    68 44204B00         push WinRAR.004B2044                           ; ASCII "ButtonsText"
0046963B    85C0                test eax,eax
0046963D    68 C0174B00         push WinRAR.004B17C0                           ; ASCII "General\Toolbar"
00469642    0F954424 12         setne byte ptr ss:[esp+12]
00469647    E8 14D3FEFF         call WinRAR.00456960
0046964C    85C0                test eax,eax
0046964E    0F954424 07         setne byte ptr ss:[esp+7]
00469653    837B 08 00          cmp dword ptr ds:[ebx+8],0
00469657    B8 200D0046         mov eax,46000D20
0046965C    74 05               je short WinRAR.00469663
0046965E    B8 640D0056         mov eax,56000D64
00469663    8B0D 5C934C00       mov ecx,dword ptr ds:[4C935C]                  ; WinRAR.00400000
00469669    8B15 C8C14D00       mov edx,dword ptr ds:[4DC1C8]
0046966F    55                  push ebp
00469670    56                  push esi
00469671    57                  push edi
00469672    6A 00               push 0
00469674    51                  push ecx
00469675    6A 0C               push 0C
00469677    52                  push edx
00469678    6A 00               push 0
0046967A    6A 00               push 0
0046967C    6A 00               push 0
0046967E    6A 00               push 0
00469680    50                  push eax
00469681    6A 00               push 0
00469683    68 F4424B00         push WinRAR.004B42F4                           ; ASCII "ToolbarWindow32"
00469688    6A 00               push 0
0046968A    FF15 A8154B00       call dword ptr ds:[<&USER32.CreateWindowExA>]  ; USER32.CreateWindowExA
00469690    8B2D 9C154B00       mov ebp,dword ptr ds:[<&USER32.SendMessageA>]  ; USER32.SendMessageA
......
......
004696D2    E8 29570100         call WinRAR.0047EE00
004696D7    84C0                test al,al
004696D9    74 35               je short WinRAR.00469710
004696DB    56                  push esi
004696DC    C64424 14 01        mov byte ptr ss:[esp+14],1
004696E1    E8 7A560100         call WinRAR.0047ED60
004696E6    57                  push edi
004696E7    894424 1C           mov dword ptr ss:[esp+1C],eax
004696EB    E8 70560100         call WinRAR.0047ED60
004696F0    894424 14           mov dword ptr ss:[esp+14],eax
004696F4    EB 27               jmp short WinRAR.0046971D
004696F6    807C24 12 00        cmp byte ptr ss:[esp+12],0
004696FB    74 0A               je short WinRAR.00469707
004696FD    BE 30000000         mov esi,30                    ; 将“大按钮”工具栏图标宽度0x30(10进制即48)放入ESI。
00469702    8D7E F4             lea edi,dword ptr ds:[esi-C]  ; 将“大按钮”工具栏图标高度[ESI-C]=0x30-0xC=0x24(10进制即36)放入EDI,
                                                              ; 因此可改成 lea edi,dword ptr ds:[esi]
00469705  ^ EB CB               jmp short WinRAR.004696D2
00469707    BE 18000000         mov esi,18                    ; 将“小按钮”工具栏图标宽度0x18(10进制即24)放入ESI,
                                                              ; 因此可改成 mov esi,20
0046970C    8BFE                mov edi,esi                   ; 将“小按钮”工具栏图标高度ESI放入EDI。
0046970E  ^ EB C2               jmp short WinRAR.004696D2
......
......


【“搜索结果”工具栏调整】:
注意:需要配合调整“CMDWNDFIND”对话框的部分控件的尺寸及位置,
   例如“ToolbarWindow32”高度改为48,“SysListView32”距离上方改为52、高度改为146。
......
......
0048AFF5    50                  push eax
0048AFF6    6A 01               push 1
0048AFF8    68 03100000         push 1003
0048AFFD    56                  push esi
0048AFFE    FFD5                call ebp
0048B000    68 8C000000         push 8C
0048B005    68 A4564B00         push WinRAR.004B56A4                           ; ASCII "ResColWidth0"
0048B00A    68 B0554B00         push WinRAR.004B55B0                           ; ASCII "Interface\FindFiles"
0048B00F    C74424 74 0F000000  mov dword ptr ss:[esp+74],0F
0048B017    C74424 78 00000000  mov dword ptr ss:[esp+78],0
0048B01F    E8 3CB9FCFF         call WinRAR.00456960
0048B024    68 E7040000         push 4E7
0048B029    894424 74           mov dword ptr ss:[esp+74],eax
0048B02D    E8 AE0DFDFF         call WinRAR.0045BDE0
0048B032    8D5424 68           lea edx,dword ptr ss:[esp+68]
0048B036    52                  push edx
0048B037    6A 00               push 0
0048B039    68 1B100000         push 101B
0048B03E    56                  push esi
0048B03F    898424 84000000     mov dword ptr ss:[esp+84],eax
0048B046    C78424 8C000000 000>mov dword ptr ss:[esp+8C],0
0048B051    FFD5                call ebp
0048B053    68 A0000000         push 0A0
0048B058    68 94564B00         push WinRAR.004B5694                           ; ASCII "ResColWidth1"
0048B05D    68 B0554B00         push WinRAR.004B55B0                           ; ASCII "Interface\FindFiles"
0048B062    E8 F9B8FCFF         call WinRAR.00456960
0048B067    68 E8040000         push 4E8
0048B06C    894424 74           mov dword ptr ss:[esp+74],eax
0048B070    E8 6B0DFDFF         call WinRAR.0045BDE0
0048B075    894424 74           mov dword ptr ss:[esp+74],eax
0048B079    8D4424 68           lea eax,dword ptr ss:[esp+68]
0048B07D    50                  push eax
0048B07E    6A 01               push 1
0048B080    68 1B100000         push 101B
0048B085    56                  push esi
0048B086    FFD5                call ebp
0048B088    68 A0000000         push 0A0
0048B08D    68 84564B00         push WinRAR.004B5684                           ; ASCII "ResColWidth2"
0048B092    68 B0554B00         push WinRAR.004B55B0                           ; ASCII "Interface\FindFiles"
0048B097    E8 C4B8FCFF         call WinRAR.00456960
0048B09C    68 E9040000         push 4E9
0048B0A1    894424 74           mov dword ptr ss:[esp+74],eax
0048B0A5    E8 360DFDFF         call WinRAR.0045BDE0
0048B0AA    8D4C24 68           lea ecx,dword ptr ss:[esp+68]
0048B0AE    51                  push ecx
0048B0AF    6A 02               push 2
0048B0B1    68 1B100000         push 101B
0048B0B6    56                  push esi
0048B0B7    898424 84000000     mov dword ptr ss:[esp+84],eax
0048B0BE    FFD5                call ebp
0048B0C0    6A 65               push 65
0048B0C2    57                  push edi
0048B0C3    FFD3                call ebx
0048B0C5    8BD8                mov ebx,eax
0048B0C7    6A 00               push 0
0048B0C9    6A 14               push 14
0048B0CB    68 1E040000         push 41E
0048B0D0    53                  push ebx
0048B0D1    FFD5                call ebp
0048B0D3    8D5424 1C           lea edx,dword ptr ss:[esp+1C]
0048B0D7    52                  push edx
0048B0D8    8D4424 34           lea eax,dword ptr ss:[esp+34]
0048B0DC    50                  push eax
0048B0DD    B9 60294E00         mov ecx,WinRAR.004E2960
0048B0E2    C74424 18 30000000  mov dword ptr ss:[esp+18],30    ; 将工具栏图标宽度0x30(10进制即48)放入[ESP+18]。
0048B0EA    C74424 20 24000000  mov dword ptr ss:[esp+20],24    ; 将工具栏图标高度0x24(10进制即36)放入[ESP+20],
                                                                ; 因此可改成 mov dword ptr ss:[esp+20],30
0048B0F2    E8 09B7FDFF         call WinRAR.00466800
0048B0F7    884424 16           mov byte ptr ss:[esp+16],al
0048B0FB    84C0                test al,al
0048B0FD    0F84 BE000000       je WinRAR.0048B1C1
0048B103    8B4424 1C           mov eax,dword ptr ss:[esp+1C]
0048B107    83F8 24             cmp eax,24
0048B10A    8B4C24 30           mov ecx,dword ptr ss:[esp+30]
0048B10E    894C24 10           mov dword ptr ss:[esp+10],ecx
0048B112    894424 18           mov dword ptr ss:[esp+18],eax
0048B116    0F8E 94000000       jle WinRAR.0048B1B0
0048B11C    8D5424 34           lea edx,dword ptr ss:[esp+34]
0048B120    52                  push edx
0048B121    56                  push esi
0048B122    FF15 48164B00       call dword ptr ds:[<&USER32.GetWindowRect>]    ; USER32.GetWindowRect
......
......


如果您对使用OllyDbg调试软件并不熟悉,也可以使用16进制编辑器(比如 UltraEdit 或 WinHex)打开“WinRAR.exe”主程序,进行如下Hex搜索替换操作:
◆搜索“8D 7E F4”,替换成“8D 3E 90”
◆搜索“BE 18 00 00 00”,替换成“BE 20 00 00 00”
◆搜索“C7 44 24 20 24 00 00 00”,替换成“C7 44 24 20 30 00 00 00”


  保存修改后的主程序,运行一下试试,看看是不是工具栏文字与图标间的距离明显增高了?
  再用资源编辑软件,调整好上面提到的“CMDWNDFIND”对话框的部分控件的尺寸及位置。
  运行修改后的主程序,点击主界面工具栏的“查找”按钮,随便搜索些什么,看看弹出的“搜索结果”对话框的工具栏显示是否正常。

      如果顺利完成了上述操作,那么恭喜您,已经修改成功了,呵呵。
  剩下的工作就是使用您喜欢的资源去配套更新默认的位图、图标等了^_^

  感兴趣的朋友不妨尝试一下,定制您自己喜欢的WinRAR默认皮肤主题。

   下载我修改好的美化默认皮肤的版本(不带其它皮肤),作为模板进行再加工。预祝大家都能制作出自己的个性版本^_^
精益求精 —— WinRAR 3.90 简体中文增强版 By D4llower 【2009.09.07 更新】

===================================================================================
注意:在网友 zjfuyong 的反馈提醒下,已经确认“直接美化默认皮肤的版本”在 Windows 2000 平台下存在崩溃的问题。
经查明,属于 Windows 2000 系统不支持 32 位色深的工具栏位图显示引起的。

由于这种直接替换默认皮肤为 32 位色深位图的方法,WinRAR 自身没有对应的异常处理函数,导致程序崩溃。因此不建议在
Windows 2000 下使用这种直接替换默认皮肤的版本。

如果有朋友确实十分需要,我可以尝试专门制作一款 8 位色深的版本,但是显示效果一定会大打折扣...
===================================================================================


继续秉承 3.80 增强版优秀品质,欢迎大家下载使用^_^


【2009.09.07 更新】:
——在网友 5544521 的提醒下,修正增强版卸载程序(仅针对集成皮肤版本),使其在 Windows 7 系统中不再产生多余的皮肤主题文件。完美的版本离不开大家的关注与支持。

【2009.09.03 更新】:
——增强卸载程序功能(仅针对集成皮肤版本),可以在卸载时彻底清除 WinRAR 保存在非安装目录下的皮肤主题残留文件,同时可实现安装后自动应用一款外置皮肤主题,并自动屏蔽 WinRAR 右键关联菜单中的“E-mail”相关项目。
——更新 7z 独立插件,支持解压 LZMA2 方式压缩的 7z 格式。

【2009.09.02 更新】:
——修正 Windows Vista/2008 系统下解压时可能出错的问题。
——附带的三款自解压模块不再加壳,既防止杀软误报,也方便大家个性定制。

【2009.08.27 更新】:此更新仅针对“直接美化默认皮肤的版本”,其它版本无需重新下载!在热心网友 Dreamcast 的提醒下,修正了“搜索结果”对话框中的工具栏显示问题,在此表示感谢。完美的版本离不开大家的关注与支持!

【2009.08.26 更新】:应部分网友的要求,增加直接美化默认皮肤的版本,可以完美支持 48×48、32×32 尺寸的工具栏图标,喜欢自己修改默认主题的朋友也可以下载作为修改模板。
[attachment=765]
  [attachment=766]

主界面:
[attachment=775]

[attachment=767]  

检查锁定标记:
[attachment=768]
WinRAR 是强大的压缩文件管理器。它提供了 RAR 和 ZIP 文件的完整支持,能解压 7Z、ACE、ARJ、BZ2、CAB、GZ、ISO、JAR、LZH、TAR、UUE、Z 格式文件。WinRAR 的功能包括强力压缩、分卷、加密、自解压模块、备份简易。

【本增强版具有以下特性】:

  ◆破除共享版所有限制。本版本已经完全破解,即便没有授权文件,也可以无限制使用除了用户身份校验之外的所有功能。

  ◆突破压缩文档锁定限制。使用本版本可以对含有锁定标记的压缩文档内容进行任意的添加、删除或更新等操作,同时不破坏原有锁定标记。

  ◆破解用户身份校验。使用本版本添加的用户身份校验信息可通过官方原版的验证,相当于正版授权。同时本版本也可以查看一些其它破解版本所添加的用户身份校验信息,而这些信息对于官方原版可能会因校验失败而无法读取。

  ◆集成实用自解压模块。本版本中集成三款修改的自解压模块,部分更换了图标和位图,或者调整了界面布局,适合需要个性定制自解压模块的用户直接使用或作为参考模板。

  ◆内置精美皮肤主题。本版本中内置了一系列精美皮肤主题,您可根据需要,在主程序的“选项”→“主题”菜单中挑选适当的皮肤,美化 WinRAR 的操作界面和文件关联图标。

  ◆增强卸载程序功能。本版本增强了卸载程序功能,可以在卸载时彻底清除 WinRAR 保存在非安装目录下的皮肤主题残留文件,同时可实现安装后自动应用一款外置皮肤主题,并自动屏蔽 WinRAR 右键关联菜单中的“E-mail”相关项目。

  ◆更新 7z 独立插件。更新 7z 插件为官方最新版本,支持解压 LZMA2 方式压缩的 7z 格式。


【附注】:本版本集成的授权文件等同于正版,对于官方原版同样有效!
  本版本仅供学习研究用途,如果您不喜欢这个增强版本,也可以下载官方原版,再配合本版本提供的授权文件即可激活所有功能。集成多款皮肤的版本:
http://www.brsbox.com/filebox/down/fc/8b44d4c327b14a82a896251bf3c9bb69

不带皮肤的版本:
wrar390sc_Enhanced_NoSkin[1][1].part1.rar (500 K) 下载次数:3
wrar390sc_Enhanced_NoSkin[1][1].part2.rar (500 K) 下载次数:2
wrar390sc_Enhanced_NoSkin[1][1].part3.rar (500 K) 下载次数:2
wrar390sc_Enhanced_NoSkin[1][1].part4.rar (355 K) 下载次数:2
    附带提供支持创建针对所有用户的快捷方式的 WinRAR 3.90 自解压模块:
WinRAR_3[1][1].90_SFX_Mod_By_D4llower_AllUsers_Edition.rar (137 K) 下载次数:2

[ 此帖被owen在2009-11-08 22:36重新编辑 ]
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水