84.游戏改造-窗口化下的分辨率

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:易道云信息技术研究院

上一个内容:83.游戏改造-窗口化

首先使用 Ollydbg.exe 调试 83.游戏改造-窗口化 它生成的exe文件

45C970通过下图红框位置可以函数 hWnd => 000705C6,可以把45C970看成是窗口句柄(HWND类型)

GetWindowLongA函数获取窗口样式

GetWindowLongA函数官方说明

AdjustWindowRectEx函数根据客户端矩形的所需大小计算窗口矩形的所需大小,计算窗口大小,就是计算窗口大小因为窗口有标题栏有菜单有这些东西的窗口大小是不一样的不是说多大就多大,假设要保证窗口的画面是一个高度要额外计算的,就是窗口的画面是640*480如果不额外计算640*480包含了标题和菜单,如果额外计算了那么画面是640*480但是整个窗口的大小是超过640*480具体多大是要看菜单和标题的大小

然后 AdjustWindowRectEx它的入参,下图栈顶是一个内存地址,这个内地址也是栈中的内存地址

栈中的位置看下图红框

执行完 AdjustWindowRectEx函数之后,大小就会变了,看下图红框,变大了

然后函数刚开始的四个MOV到这可以看出它实际上是一个 RECT结构

然后继续往下看,可以看到它调用了 SetWindowPos 函数

SetWindowPos更改子窗口、弹出窗口或顶级窗口的大小、位置和 Z 顺序。 这些窗口根据屏幕上的外观进行排序,就是设置窗口的大小和显示位置,然后它窗口化和全屏用的是两种方式全屏用的 SetDisplayMode函数,窗口化用的是SetWindowPos函数,完全是两种不同的技术所以之前改的分辨率不会起作用

然后窗口化的分辨率是在下图红框位置修改,修改为 0x780 * 0x438(1920 * 1080)

然后有一个点 再调用AdjustWindowRectEx函数时栈中的数据也可看出很显然是一个 RECT结构,然后还可以看出其它参数的结构,这些结构都是通过它前面的哪几个函数得到的

然后设置完窗口又做了

然后执行到RETN让它返回

返回之后,这里是一系列的 Direct操作让代码执行到RETN的位置让它返回

返回

返回之后,有比较色深的代码, Screen BPP must be 16 bit中文意思是 屏幕BPP必须为16位,也就是色深必须是16位

新保存色深的变量

现在已确定的内存地址作用:可以看出它们可能是一个结构体,因为挨着都很近

43D740是窗口化,类型是unsigned,准确说应该是bool类型,true(值是1)是全屏,false(值是0)窗口化

43D75C是Direct指针,类型是unsigned

4391F0是屏幕高度,分辨率,类型是unsigned

4391EC是屏幕宽度,分辨率,类型是unsigned

4391F8是色深,类型是unsigned

4391FC是色深,类型是unsigned

4579C0是HWND窗口句柄

修改之后效果图:

保存修改后的代码方式

然后选择复制到可执行文件

然后选全部复制

然后选择保存数据到文件


  • 45
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值