wxt5210 发表于 2023-12-31 15:11:28

求助指针到文本的疑惑



这是我在hook中拦截下函数获取指针内文本内容,使用易语言可以正确获取到指针内的文本,在火山则不能正常获取

urenai 发表于 2023-12-31 15:36:23

编码不同。

火山这边可以使用   : 多字节指针到文本()

wxt5210 发表于 2023-12-31 15:45:10

urenai 发表于 2023-12-31 15:36
编码不同。

火山这边可以使用   : 多字节指针到文本()

我试过用多字节指针到文本程序直接就崩了

Xelloss0618 发表于 2023-12-31 16:42:01


一、lpMultiByteStr 用「指针到文本」,由于文本编码不同,自然不能转换到文本;
二、用「多字节指针到文本」处理 lpMultiByteStr,编码一样,但「多字节指针到文本」本身就会调用 MultiByteToWideChar,这就形成递归命令(命令不断调用自身),直接崩了;
所以只能用字节集获取lpMultiByteStr,或者在执行原函数后,获取转换后的Unicode文本。

wxt5210 发表于 2023-12-31 16:53:53

Xelloss0618 发表于 2023-12-31 16:42
一、lpMultiByteStr 用「指针到文本」,由于文本编码不同,自然不能转换到文本;
二、用「多字节指针到文 ...

多谢大师解惑   这样是能获取到转换后的文本   我实际目的是想在转换之前把lpMultiByteStr指针里面的英文内容替换为中文达到汉化的目的    如果按照这个逻辑我是不是就要直接修改lpWideCharStr指针的内容   但是翻译后的数据长度和原长度又不一样了   

Xelloss0618 发表于 2023-12-31 17:02:47

wxt5210 发表于 2023-12-31 16:53
多谢大师解惑   这样是能获取到转换后的文本   我实际目的是想在转换之前把lpMultiByteStr指针里面的英 ...

英文软件一般也不需要调用 MultiByteToWideChar 吧……
另外也可以试试 SetWindowText,在界面上显示文本,一般用调用这个 API,直接替换掉它的文本即可

muye84 发表于 2023-12-31 18:26:56

Xelloss0618 发表于 2023-12-31 16:42
一、lpMultiByteStr 用「指针到文本」,由于文本编码不同,自然不能转换到文本;
二、用「多字节指针到文 ...

大佬,这个简易hook类是啥模块里带的啊?能单独扣出来不得?

Xelloss0618 发表于 2023-12-31 19:36:59

muye84 发表于 2023-12-31 18:26
大佬,这个简易hook类是啥模块里带的啊?能单独扣出来不得?

我的 PIV模块,可以扣

wxt5210 发表于 2024-1-2 10:34:18

Xelloss0618 发表于 2023-12-31 17:02
英文软件一般也不需要调用 MultiByteToWideChar 吧……
另外也可以试试 SetWindowText,在界面上显示文本 ...

我先在用了DrawTextA和DrawTextExW、ExtTextOutW三个函数进行操作的    界面基本都能替换成中文但是有一个缺点就是当所显示的控件或者表格不完整的时候输出内容也是不完整的这样对语言库里面就不能查找到翻译,但是这个程序输出到界面的内容是从另一个服务程序里面进程通讯接收过来的内容   服务程序里面进行MultiByteToWideChar转换的所以想在服务程序里面拦截这个函数直接在源头解决问题。
页: [1]
查看完整版本: 求助指针到文本的疑惑