找回密码
 注册
广告投放 虚位以待【阿里云】2核2G云新老同享 99元/年,续费同价做网站就用糖果主机-sugarhosts.comJtti.com-新加坡服务器,美国服务器,香港服务器
查看: 263|回复: 0

关于修改 WinRAR 3.91 默认主题工具栏图标尺寸的方法(含64位版)

[复制链接]
发表于 2010 年 10 月 7 日 07:27:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×

本帖最后由 D4llower 于 2010-1-1 01:46 编辑
独乐乐不如众乐乐 —— 关于修改 WinRAR 3.91 默认主题工具栏图标尺寸的方法
应广大网友要求,增加64位版本修改方法!

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

  3.91版(32位)的修改方法与3.90版类似 (有兴趣可参考http://bbs.wmzhe.com/viewthread.php?tid=90844),这次的重点是64位版本。Enjoy it!

=====================================================================================
32位版本修改方法(以下是OllyDbg中的部分关键反汇编代码):
【主界面工具栏调整】:
00469120  /$  81EC 80060000       sub esp,680
00469126  |.  A1 90034C00         mov eax,dword ptr ds:[4C0390]
0046912B  |.  33C4                xor eax,esp
0046912D  |.  898424 7C060000     mov dword ptr ss:[esp+67C],eax
00469134  |.  53                  push ebx
00469135  |.  8BD9                mov ebx,ecx
00469137  |.  8B03                mov eax,dword ptr ds:[ebx]
00469139  |.  85C0                test eax,eax
0046913B  |.  74 0D               je short WinRAR.0046914A
0046913D  |.  50                  push eax                             ; /hWnd
0046913E  |.  FF15 AC154B00       call dword ptr ds:[<&USER32.Destr>; \DestroyWindow
00469144  |.  C703 00000000       mov dword ptr ds:[ebx],0
0046914A  |>  6A 01               push 1
0046914C  |.  68 D0424B00         push WinRAR.004B42D0              ;  ASCII "ViewMain"
00469151  |.  68 C0174B00         push WinRAR.004B17C0              ;  ASCII "General\Toolbar"
00469156  |.  E8 A5D2FEFF         call WinRAR.00456400
0046915B  |.  85C0                test eax,eax
0046915D  |.  0F84 1F040000       je WinRAR.00469582
00469163  |.  6A 01               push 1
00469165  |.  68 50204B00         push WinRAR.004B2050              ;  ASCII "LargeButtons"
0046916A  |.  68 C0174B00         push WinRAR.004B17C0              ;  ASCII "General\Toolbar"
0046916F  |.  E8 8CD2FEFF         call WinRAR.00456400
00469174  |.  6A 01               push 1
00469176  |.  68 44204B00         push WinRAR.004B2044              ;  ASCII "ButtonsText"
0046917B  |.  85C0                test eax,eax
0046917D  |.  68 C0174B00         push WinRAR.004B17C0              ;  ASCII "General\Toolbar"
......
......
0046923D  |.  BE 30000000         mov esi,30                        ; 将“大按钮”工具栏图标宽度0x30(10进制即48)放入ESI。
00469242  |.  8D7E F4             lea edi,dword ptr ds:[esi-C]      ; 将“大按钮”工具栏图标高度[ESI-C]=0x30-0xC=0x24(10进制即36)放入EDI,
                                                                    ; 所以可改成 lea edi,dword ptr ds:[esi]
00469245  |.^ EB CB               jmp short WinRAR.00469212
00469247  |>  BE 18000000         mov esi,18                        ; 将“小按钮”工具栏图标宽度0x18(10进制即24)放入ESI,
                                                                    ; 所以可改成 mov esi,20
0046924C  |.  8BFE                mov edi,esi                       ; 将“小按钮”工具栏图标高度ESI放入EDI。
......
......

【“搜索结果”工具栏调整】:
注意:需要配合调整“CMDWNDFIND”对话框的部分控件的尺寸及位置,
   比如“ToolbarWindow32高度改为48,“SysListView32距离上方改为52高度改为146
0048A8A0   .  81EC 2C080000       sub esp,82C
0048A8A6   .  A1 90034C00         mov eax,dword ptr ds:[4C0390]
0048A8AB   .  33C4                xor eax,esp
0048A8AD   .  898424 28080000     mov dword ptr ss:[esp+828],eax
0048A8B4   .  53                  push ebx
0048A8B5   .  55                  push ebp
0048A8B6   .  8BAC24 3C080000     mov ebp,dword ptr ss:[esp+83C]
0048A8BD   .  56                  push esi
0048A8BE   .  8BB424 48080000     mov esi,dword ptr ss:[esp+848]
0048A8C5   .  57                  push edi
0048A8C6   .  8BBC24 40080000     mov edi,dword ptr ss:[esp+840]
0048A8CD   .  897C24 2C           mov dword ptr ss:[esp+2C],edi
0048A8D1   .  897424 28           mov dword ptr ss:[esp+28],esi
0048A8D5   .  83FD 4E             cmp ebp,4E                        ;  Switch (cases 5..111)
0048A8D8   .  0F87 F7010000       ja WinRAR.0048AAD5
0048A8DE   .  0F84 8B010000       je WinRAR.0048AA6F
0048A8E4   .  83FD 05             cmp ebp,5
0048A8E7   .  0F84 CB000000       je WinRAR.0048A9B8
0048A8ED   .  83FD 10             cmp ebp,10
0048A8F0   .  0F85 56080000       jnz WinRAR.0048B14C
0048A8F6   .  6A 66               push 66                           ; /ControlID = 66 (102.); Case 10 (WM_CLOSE) of switch 0048A8D5
0048A8F8   .  57                  push edi                          ; |hWnd
0048A8F9   .  FF15 40164B00       call dword ptr ds:[<&USER32.GetDl>; \GetDlgItem
0048A8FF   .  8B2D 9C154B00       mov ebp,dword ptr ds:[<&USER32.Se>;  USER32.SendMessageA
0048A905   .  6A 00               push 0                            ; /lParam = 0
0048A907   .  6A 00               push 0                            ; |wParam = 0
0048A909   .  8BD8                mov ebx,eax                       ; |
0048A90B   .  68 1D100000         push 101D                         ; |Message = MSG(101D)
0048A910   .  53                  push ebx                          ; |hWnd
0048A911   .  FFD5                call ebp                          ; \SendMessageA
0048A913   .  50                  push eax
0048A914   .  68 6C564B00         push WinRAR.004B566C              ;  ASCII "ResColWidth0"
0048A919   .  68 78554B00         push WinRAR.004B5578              ;  ASCII "Interface\FindFiles"
0048A91E   .  E8 7DB9FCFF         call WinRAR.004562A0
0048A923   .  6A 00               push 0                            ; /lParam = 0
0048A925   .  6A 01               push 1                            ; |wParam = 1
0048A927   .  68 1D100000         push 101D                         ; |Message = MSG(101D)
0048A92C   .  53                  push ebx                          ; |hWnd
0048A92D   .  FFD5                call ebp                          ; \SendMessageA
0048A92F   .  50                  push eax
0048A930   .  68 5C564B00         push WinRAR.004B565C              ;  ASCII "ResColWidth1"
0048A935   .  68 78554B00         push WinRAR.004B5578              ;  ASCII "Interface\FindFiles"
0048A93A   .  E8 61B9FCFF         call WinRAR.004562A0
0048A93F   .  6A 00               push 0                            ; /lParam = 0
0048A941   .  6A 02               push 2                            ; |wParam = 2
0048A943   .  68 1D100000         push 101D                         ; |Message = MSG(101D)
0048A948   .  53                  push ebx                          ; |hWnd
0048A949   .  FFD5                call ebp                          ; \SendMessageA
0048A94B   .  50                  push eax
0048A94C   .  68 4C564B00         push WinRAR.004B564C              ;  ASCII "ResColWidth2"
0048A951   .  68 78554B00         push WinRAR.004B5578              ;  ASCII "Interface\FindFiles"
0048A956   .  E8 45B9FCFF         call WinRAR.004562A0
......
......
0048AD22   .  C74424 18 30000000  mov dword ptr ss:[esp+18],30      ; 将工具栏图标宽度0x30(10进制即48)放入[ESP+18]。
0048AD2A   .  C74424 20 24000000  mov dword ptr ss:[esp+20],24      ; 将工具栏图标高度0x24(10进制即36)放入[ESP+20],
                                                                    ; 所以可改成 mov dword ptr ss:[esp+20],30
......
......

假设您对使用OllyDbg调试软件并不熟悉,也可以使用16进制编辑器(例如 UltraEditWinHex)打开“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

=====================================================================================
64位版本修改方法(以下是WinDbg中的部分关键反汇编代码):
【主界面工具栏调整】:
00000001`400693a8 48895c2410      mov     qword ptr [rsp+10h],rbx
00000001`400693ad 48896c2418      mov     qword ptr [rsp+18h],rbp
00000001`400693b2 4889742420      mov     qword ptr [rsp+20h],rsi
00000001`400693b7 57              push    rdi
00000001`400693b8 4154            push    r12
00000001`400693ba 4155            push    r13
00000001`400693bc 4156            push    r14
00000001`400693be 4157            push    r15
00000001`400693c0 4881ec10070000  sub     rsp,710h
00000001`400693c7 488b0502650600  mov     rax,qword ptr [WinRAR+0xcf8d0 (00000001`400cf8d0)]
00000001`400693ce 4833c4          xor     rax,rsp
00000001`400693d1 4889842400070000 mov     qword ptr [rsp+700h],rax
00000001`400693d9 488bd9          mov     rbx,rcx
00000001`400693dc 488b09          mov     rcx,qword ptr [rcx]
00000001`400693df 33ff            xor     edi,edi
00000001`400693e1 88542462        mov     byte ptr [rsp+62h],dl
00000001`400693e5 483bcf          cmp     rcx,rdi
00000001`400693e8 7409            je      WinRAR+0x693f3 (00000001`400693f3)
00000001`400693ea ff1578d70400    call    qword ptr [WinRAR+0xb6b68 (00000001`400b6b68)]
00000001`400693f0 48893b          mov     qword ptr [rbx],rdi
00000001`400693f3 488d356edd0400  lea     rsi,[WinRAR+0xb7168 (00000001`400b7168)]
00000001`400693fa 488d150f250500  lea     rdx,[WinRAR+0xbb910 (00000001`400bb910)]
00000001`40069401 41b801000000    mov     r8d,1
00000001`40069407 488bce          mov     rcx,rsi
00000001`4006940a e8d5dbfeff      call    WinRAR+0x56fe4 (00000001`40056fe4)
00000001`4006940f 3bc7            cmp     eax,edi
00000001`40069411 0f8431040000    je      WinRAR+0x69848 (00000001`40069848)
00000001`40069417 488d1572f00400  lea     rdx,[WinRAR+0xb8490 (00000001`400b8490)]
00000001`4006941e 41b801000000    mov     r8d,1
00000001`40069424 488bce          mov     rcx,rsi
00000001`40069427 e8b8dbfeff      call    WinRAR+0x56fe4 (00000001`40056fe4)
00000001`4006942c 488d154df00400  lea     rdx,[WinRAR+0xb8480 (00000001`400b8480)]
00000001`40069433 41b801000000    mov     r8d,1
00000001`40069439 3bc7            cmp     eax,edi
00000001`4006943b 488bce          mov     rcx,rsi
00000001`4006943e 410f95c7        setne   r15b
00000001`40069442 e89ddbfeff      call    WinRAR+0x56fe4 (00000001`40056fe4)
......
......
00000001`400694ef be30000000      mov     esi,30h          ; 将“大按钮”工具栏图标宽度0x30(10进制即48)放入 ESI。
00000001`400694f4 8d6ef4          lea     ebp,[rsi-0Ch]    ; 将“大按钮”工具栏图标高度[RSI-0C]=0x30-0xC=0x24(10进制即36)放入 EBP,
                                                           ; 所以可改成 lea ebp,[rsi]
00000001`400694f7 eb11            jmp     WinRAR+0x6950a (00000001`4006950a)
00000001`400694f9 be18000000      mov     esi,18h          ; 将“小按钮”工具栏图标宽度0x18(10进制即24)放入 ESI,
                                                           ; 所以可改成 mov esi,20
00000001`400694fe 8bee            mov     ebp,esi          ; 将“小按钮”工具栏图标高度 ESI 放入 EBP。
......
......

【“搜索结果”工具栏调整】:
注意:需要配合调整“CMDWNDFIND”对话框的部分控件的尺寸及位置,
   比如“ToolbarWindow32高度改为48,“SysListView32距离上方改为52高度改为146
00000001`4008cc54 4055            push    rbp
00000001`4008cc56 56              push    rsi
00000001`4008cc57 57              push    rdi
00000001`4008cc58 4154            push    r12
00000001`4008cc5a 4155            push    r13
00000001`4008cc5c 4156            push    r14
00000001`4008cc5e 4157            push    r15
00000001`4008cc60 4881ecc0080000  sub     rsp,8C0h
00000001`4008cc67 488b05622c0400  mov     rax,qword ptr [WinRAR+0xcf8d0 (00000001`400cf8d0)]
00000001`4008cc6e 4833c4          xor     rax,rsp
00000001`4008cc71 48898424b0080000 mov     qword ptr [rsp+8B0h],rax
00000001`4008cc79 8bc2            mov     eax,edx
00000001`4008cc7b 4d8be1          mov     r12,r9
00000001`4008cc7e 4c898c24e0000000 mov     qword ptr [rsp+0E0h],r9
00000001`4008cc86 83e805          sub     eax,5
00000001`4008cc89 4d8bf0          mov     r14,r8
00000001`4008cc8c 4c89842480000000 mov     qword ptr [rsp+80h],r8
00000001`4008cc94 89542470        mov     dword ptr [rsp+70h],edx
00000001`4008cc98 488be9          mov     rbp,rcx
00000001`4008cc9b 48898c24d0000000 mov     qword ptr [rsp+0D0h],rcx
00000001`4008cca3 0f84b5080000    je      WinRAR+0x8d55e (00000001`4008d55e)
00000001`4008cca9 83e80b          sub     eax,0Bh
00000001`4008ccac 0f84bc070000    je      WinRAR+0x8d46e (00000001`4008d46e)
00000001`4008ccb2 83e83e          sub     eax,3Eh
00000001`4008ccb5 0f844c070000    je      WinRAR+0x8d407 (00000001`4008d407)
00000001`4008ccbb 2dc2000000      sub     eax,0C2h
00000001`4008ccc0 be01000000      mov     esi,1
00000001`4008ccc5 0f84f5000000    je      WinRAR+0x8cdc0 (00000001`4008cdc0)
00000001`4008cccb 3bc6            cmp     eax,esi
00000001`4008cccd 0f851d070000    jne     WinRAR+0x8d3f0 (00000001`4008d3f0)
00000001`4008ccd3 833d96f0050000  cmp     dword ptr [WinRAR+0xebd70 (00000001`400ebd70)],0
00000001`4008ccda 7529            jne     WinRAR+0x8cd05 (00000001`4008cd05)
00000001`4008ccdc 488b3d7d320600  mov     rdi,qword ptr [WinRAR+0xeff60 (00000001`400eff60)]
00000001`4008cce3 ff154fa00200    call    qword ptr [WinRAR+0xb6d38 (00000001`400b6d38)]
......
......
00000001`4008cf70 41bf30000000    mov     r15d,30h                                  ; 将工具栏图标宽度0x30(10进制即48)放入 r15d。
00000001`4008cf76 4c8d442444      lea     r8,[rsp+44h]
00000001`4008cf7b 488d54244c      lea     rdx,[rsp+4Ch]
00000001`4008cf80 488d0d995f0600  lea     rcx,[WinRAR+0xf2f20 (00000001`400f2f20)]
00000001`4008cf87 458d77f4        lea     r14d,[r15-0Ch]                            ; 将工具栏图标高度[R15-0C]=0x30-0xC=0x24(10进制即36)放入 r14d,
                                                                                    ; 所以可改成 lea  r14d, [r15]
......
......

假设您对使用WinDbg调试软件并不熟悉,也可以使用16进制编辑器(例如 UltraEditWinHex)打开“WinRAR.exe”主程序,进行如下Hex搜索替换操作:
◆搜索“8D 6E F4”,替换成“8D 2E 90
◆搜索“BE 18 00 00 00”,替换成“BE 20 00 00 00
◆搜索“45 8D 77 F4”,替换成“45 8D 77 00

=====================================================================================


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

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

  感兴趣的朋友不妨尝试一下,定制您自己喜欢的WinRAR默认皮肤主题。
  您也可以到 http://bbs.wmzhe.com/redirect.php?tid=101751 下载我修改好的美化默认皮肤的版本(不带其它皮肤),作为模板进行再加工。预祝大家都能制作出自己的个性版本^_^
                                     D4llower,2010.01
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|金光论坛

GMT+8, 2025 年 2 月 2 日 18:01 , Processed in 0.026334 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表