这贴不知道该发到求助区还是发到这里,犹豫半天,最终,还是。。。
SkinSharp是一款换肤软件,很是小巧实用。只是,最近发现两个小BUG(算BUG吧?)
1.只支持RichEdit1.0,RichEdit2.0及之后的版本都不支持
2.不支持AnimateWindow函数,也就是动画窗口
于是,调试了一下,发现RichEdit的BUG似乎很好解决,如下:
对GetClassNameA下断,运行到这里断下:
10019380 50 push eax ; 窗口类名返回到这里
10019381 51 push ecx
10019382 FF15 90610210 call dword ptr [10026190] ; user32.GetClassNameA
10019388 8B56 0C mov edx, dword ptr [esi+C]
1001938B 8B0D D8A80210 mov ecx, dword ptr [1002A8D8]
10019391 8D4424 0C lea eax, dword ptr [esp+C]
10019395 52 push edx
10019396 50 push eax
10019397 E8 E4F9FFFF call 10018D80 ; 跟进去
往下走,到这里:
10018E43 68 2CA40210 push 1002A42C ;窗口类名"RICHEDIT"
10018E48 56 push esi ;"RICHEDIT","RICHEDIT20A","RICHEDIT50W",RichEdit起码有这三种类名
10018E49 FFD7 call edi ;比较
10018E4B 83C4 08 add esp, 8
10018E4E 85C0 test eax, eax
10018E50 75 18 jnz short 10018E6A ;比较的结果当然就是,除了1.0,其他版本概不支持
解决方法:在SkinH_Attach之后,勾住这里:call 10018D80。把高版本的类名替换成"RICHEDIT"就可以了。
至于第二个问题,主要是因为作者没有处理两个消息:
WM_PRINT 和 WM_PRINTCLIENT
两个消息的wParam就是HDC,用这个句柄重画皮肤就可以了。
我只会做简单的事情,至于脱壳、直接修改DLL这种复杂的事还是留给其他人去做吧。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)