---Warkey 界面修改手记
WarKey 是一个魔兽辅助工具,它可以修改英雄物品栏的快捷键,以及显血条等,越来越多的玩家开始离不开它,我所知道的是,很多玩真三的人都在使用它。遗憾的是,这个工具功能上挺实用,但是界面却很糟糕,完全不是一个已经对外发布的作品应该有的。请看截图:
这是主窗口。第一是菜单,又是“File”,又是“自定义……”,不知道这个到底是中文软件还是英文软件;第二是字体,作者只是用 DrawText 函数显示了一下文字,没有设置字体,默认系统会使用 System 字体,效果就是图上这样,另外搞不懂作者为什么要居中……
这个设置窗口还马马虎虎,不过也有很多不和谐的地方。这里的字体是 10 号宋体,而一般软件都用 9 号宋体的,看上去偏大。三个按钮又和主窗口的菜单一样,不英不汉。“数字7”、“数字4”、“数字1”这三个标签有些挡住后边的文本框了。另外下面的说明文字略显不够大方。
这是关于窗口。这里显示“魔兽小助手”,而主窗口标题栏显示的是“warkey”,名字不统一。而且这里字体也是 System,标签不够长,显示不下“完美版”什么的。
综上,我觉得这个界面令我极不舒服,于是决定改之。后面两个窗口都是标准资源,用 Resource Hacker 很快改好了,并修改了部分文字。软件名称我将它统一为“WarKey”。我发现原程序中有用以实现 XP 风格的 24 号资源,但是不知怎么的,它的内容却是错误的,顺手改了下。把所有按钮的 Flat 风格去掉了。效果如下:
个人觉得舒服多了。
剩下的问题就是主窗口了。作者只是调用了 DrawText,之前并没有设置字体,要改的话要加入一点代码。在文件 00007A10 后有一大段空白,考虑将代码放在这里。设想这样子实现,先调用 CreateFontIndirect 创建字体,然后使用 SelectObject 来选择字体,最后使用 DrawText 显示。先使用 LordPE 将 gdi32.dll 里的 CreateFontIndirectA 和 SelectObject 加入输入表。CreateFontIndirectA 需要一个字体结构--,我在文件偏移 00007A30 处加入标准的 9 号宋体的字体结构,内容为:
F4FFFFFF000000000000000000000000900100000000008600000000CBCECCE5
(参考自 http://teach.hanzify.org/index.php?Go=Show::351-1068825600)
使用 OllyDbg 调试,找到调用 DrawTextA 的地方:
最上面一行 6A 01 是对齐方式,我把它改成 6A 00,就是 DT_LEFT。这里代码很紧凑,几乎没地方写额外的代码,只好把最后一句 Call 改掉,上面的 5 个 Push 作为我们自己的函数的参数。改为这样:
这里 00408650 对应文件偏移 00007A50,也就是字体结构后面紧接着的位置。下面我们就在 00408650 处写自己的函数:
大功告成。顺便修改了主窗口风格,禁止了最大化按钮,具体位置是调用 CreateWindowExA 的地方:
选中的那一行,原来是 68 0000CF00 的。
调整了下菜单和文字,最后效果:
功能上,把保存按键的文件名由 warkey.txt 改为了 warkey.cfg,取消了隐藏属性。
第一次成功地把东西改到自己满意的地步哈,请各位看官指教。
下载地址:请到我的网盘(http://streamlet.ys168.com/)下载。
(原发表于 CSDN:https://blog.csdn.net/cnStreamlet/article/details/1726822)