目的:不用DLL实现窗口化,解决失去焦点全屏的问题
工具:Ollydbg
曾经有人发布过改法,不过还需要用DLL,我最近也试着修改Main实现窗口化,终于修改成功了,不再需要DLL,所以就发布出来让大家看看,骂人的就免了.
由于韩版的Main都是带有NP,如果单是改窗口化,必定报错,无法运行游戏,首先我们先去掉NP,先说说去NP的方法,我改的方法很简单,只改两处,请看下面:
1.
将
004A2F09 |. /74 29 je short 004A2F34
改成
004A2F09 . /EB 29 jmp short 004A2F34
2.
将
004A2F61 |. /0F85 A5000000 jnz 004A300C
改成
004A2F61 . /E9 A6000000 jmp 004A300C
004A2F66 |90 nop
现在我们开始改窗口化,共有3处:
1.跳过更新分辨率
将
004A31DA |. /0F8D C2000000 |jge 004A32A2
改成
jmp 004A32A2
nop ;这个不能少
2.改窗口样式
从004A1E58重写代码
004A1E58 |. 83C1 22 add ecx,22
004A1E5B |. 83C2 08 add edx,8
004A1E5E |. 6A 00 push 0 ; /lParam = NULL
004A1E60 |. 56 push esi ; |hInst
004A1E61 |. 6A 00 push 0 ; |hMenu = NULL
004A1E63 |. 6A 00 push 0 ; |hParent = NULL
004A1E65 |. 51 push ecx ; |Height
004A1E66 |. 52 push edx ; |Width
004A1E67 |. 6A 00 push 0 ; |Y = 0
004A1E69 |. 6A 00 push 0 ; |X = 0
004A1E6B |. 68 0000CC02 push 02CC0000 ; |Style =
WS_OVERLAPPED|WS_CLIPCHILDREN|WS_SYSMENU|WS_THICKFRAME|WS_CAPTION
004A1E70 |. 68 DC5A6600 push 00665ADC ; |WindowName = "MU"
004A1E75 |. 68 DC5A6600 push 00665ADC ; |Class = "MU"
004A1E7A |. 6A 00 push 0 ; |ExtStyle = 0
004A1E7C |. FF15 E8746500 call dword ptr ds:[6574E8] ; /CreateWindowExA
004A1E82 |. 5E pop esi
004A1E83 |. 8BE5 mov esp,ebp
004A1E85 |. 5D pop ebp
004A1E86 /. C3 retn
这个可以根据个人爱好更改,我这里调整了窗口大小,如果想居中可以想办法加上代码
3.过滤消息
这个很重要,以前他们解决不了失去焦点全屏的就因为这个地方没有改
将
004A6C41 |> /8B15 9CBE6E05 |mov edx,dword ptr ds:[56EBE9C]
改成
004A6C41 > /E9 EF040000 jmp main_win.004A7135
004A6C46 90 nop
本文属 fly2sky 与 C.MG 版权所有,做人要厚道,转载请注明来自C.MG(www.MG173.com)