递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 3123|回复: 8
打印 上一主题 下一主题

[视窗] 求助指针到文本的疑惑

[复制链接]

8

主题

40

帖子

321

积分

中级会员

Rank: 3Rank: 3

积分
321
跳转到指定楼层
楼主
发表于 2023-12-31 15:11:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式


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

使用道具 举报

347

主题

1603

帖子

6550

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6550
QQ
沙发
发表于 2023-12-31 15:36:23 | 只看该作者
编码不同。

火山这边可以使用   : 多字节指针到文本()
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

8

主题

40

帖子

321

积分

中级会员

Rank: 3Rank: 3

积分
321
板凳
 楼主| 发表于 2023-12-31 15:45:10 | 只看该作者
urenai 发表于 2023-12-31 15:36
编码不同。

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

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

使用道具 举报

26

主题

1904

帖子

6941

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6941
地板
发表于 2023-12-31 16:42:01 | 只看该作者

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

回复

使用道具 举报

8

主题

40

帖子

321

积分

中级会员

Rank: 3Rank: 3

积分
321
5#
 楼主| 发表于 2023-12-31 16:53:53 | 只看该作者
Xelloss0618 发表于 2023-12-31 16:42
一、lpMultiByteStr 用「指针到文本」,由于文本编码不同,自然不能转换到文本;
二、用「多字节指针到文 ...

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

使用道具 举报

26

主题

1904

帖子

6941

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6941
6#
发表于 2023-12-31 17:02:47 | 只看该作者
wxt5210 发表于 2023-12-31 16:53
多谢大师解惑     这样是能获取到转换后的文本   我实际目的是想在转换之前把lpMultiByteStr指针里面的英 ...

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

使用道具 举报

1

主题

17

帖子

481

积分

中级会员

Rank: 3Rank: 3

积分
481
7#
发表于 2023-12-31 18:26:56 | 只看该作者
Xelloss0618 发表于 2023-12-31 16:42
一、lpMultiByteStr 用「指针到文本」,由于文本编码不同,自然不能转换到文本;
二、用「多字节指针到文 ...

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

使用道具 举报

26

主题

1904

帖子

6941

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6941
8#
发表于 2023-12-31 19:36:59 | 只看该作者
muye84 发表于 2023-12-31 18:26
大佬,这个简易hook类是啥模块里带的啊?能单独扣出来不得?

我的 PIV模块,可以扣
回复

使用道具 举报

8

主题

40

帖子

321

积分

中级会员

Rank: 3Rank: 3

积分
321
9#
 楼主| 发表于 2024-1-2 10:34:18 | 只看该作者
Xelloss0618 发表于 2023-12-31 17:02
英文软件一般也不需要调用 MultiByteToWideChar 吧……
另外也可以试试 SetWindowText,在界面上显示文本 ...

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-27 14:23 , Processed in 0.101207 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表