用Hook使控件支持Unicode

易语言 2020-02-25 19:29:56

用Hook使控件支持Unicode

于是便有很多骚操作出现(比如CreateWindowExW覆盖原控件,修改窗口函数)(再比如写一个控件库,比如我开发的)

但是,最近发现一个骚操作,也可以使易程序支持Unicode。

这里的所有控件都是易自带的原版控件,但是却可以显示Unicode文本,这是怎么回事。

如果不介意的话,阅读代码时,可以配合这下面我的思路看看

1、首先,程序肯定不是直接通过启动窗口启动的,而是绕了个弯子:

先执行了“InlineHook_”的命令,钩掉了“DrawTextA”,“CreateWindowExA”,“SetWindowLongA”3个函数
2、处理,处理“CreateWindowExA”,“SetWindowLongA”并不是很困难,用他们对应的Unicode版的命令替换掉就OK

3、处理DrawTextA,标签是通过这个函数来把字符绘制上去的,所以要处理掉这个函数:

其实就是判断一下是否是要绘制标签,然后用“DrawTextW”替换“DrawTextA”,否则执行“DrawTextA”
4、设置标题,其实就是用“SetWindowTextW”这个函数

注意“#测试Unicode”中的Unicode不是标准的Unicode,需要加上{0,0}