VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 943|回复: 4

使用SendMessage获取文本失败!麻烦大家帮我看一下

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-20 11:20:02 | 显示全部楼层 |阅读模式
部分代码如下:

struct CHARRANGE
{
        long cpMin;
        long cpMax;
}

struct TEXTRANGE
{
        CHRANGE chrg;
        string lpstrText;
}

CHARRANGE CR;
TEXTRANGE TR = new TEXTRANGE();

IntPtr hWndOutPut = FindWindowEx(MainWindowHandle, IntPtr.Zero, "RICHEDIT", "");

int lineCount = SendMessage(hWndOutPut, EM_GETLINECOUNT, 0, ref TR);
int lc = SendMessage(hWndOutPut, EM_LINELENGTH, 0, ref TR);
int charFrom = SendMessage(hWndOutPut, EM_LINEINDEX, lineCount - 1, ref TR);
int charEnd = charFrom + lc;

CR.cpMin = charFrom;
CR.cpMax = charEnd;
TR.chrg = CR;
TR.lpstrText = new String('\0',10240);

SendMessage(hWndOutPut, EM_GETTEXTRANGE, 0, ref TR);

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, ref TEXTRANGE lParam);

其中MainWindowHandle是另外一个程序的主窗口的句柄,获取其中一个RichEdit的句柄后,想获得其中的文本,
但SendMessage执行后TR中lpstrText为空,请大家帮帮我,找出错误所在。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-30 19:45:02 | 显示全部楼层
MainWindowHandle
是否是正确的值?
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-1-31 01:45:01 | 显示全部楼层
用spy++查看了,确定是正确的
取文本的行数也正确
回复

使用道具 举报

1

主题

15

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-1-31 17:09:01 | 显示全部楼层
我想问一下搂主,你问什么不先通过重载winproc函数,将消息接收回来后再将其赋值给你需要的地方呢?
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-2-1 21:45:01 | 显示全部楼层
引用 :我想问一下搂主,你问什么不先通过重载winproc函数,将消息接收回来后再将其赋值给你需要的地方呢?

我学C#不久,不明白您的意思,如何重载winproc?有何作用?
谢谢
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

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