不能在我的c#程序中使用SendMessage_EX两次

时间:2011-08-13 13:41:19

标签: c# sendmessage

我面临一个非常奇怪的问题,无法弄清楚错误在哪里。我正在使用SendMessage_EX来获取指定行的文本:

SendMessage_Ex(hr.Handle, EM_GETLINE, l, buffer);

然后我这样调用两次方法:

StringBuilder buffer = new StringBuilder(256);
SendMessage_Ex(hr.Handle, EM_GETLINE, 5, buffer);
StringBuilder buffer1 = new StringBuilder(256);
SendMessage_Ex(hr.Handle, EM_GETLINE, 4, buffer1);

它正确获取第5行的文本,然后第4行获取文本,它不返回任何内容(buffer1为空)。 如果我将它反转并首先获得第4行然后第5行,它将返回第4行的文本而第5行没有任何内容。

这很奇怪,我确定我犯了一个简单的错误,但错误在哪里? 我感谢任何帮助。 :)

1 个答案:

答案 0 :(得分:1)

EM_GETLINE消息希望缓冲区的大小在它用于缓冲区的相同参数中传递。我不能只设置StringBuilder的0索引而不将其初始化为某个值(得到索引异常)。

这似乎有效:

StringBuilder buffer = new StringBuilder("   ", 256);
buffer[0] = (char)256;   
int Result = SendMessage_Ex(textBox1.Handle, EM_GETLINE, 3, buffer);

StringBuilder buffer1 = new StringBuilder("   ", 256);
buffer1[0] = (char)256;
int Result1 = SendMessage_Ex(textBox1.Handle, EM_GETLINE, 2, buffer1);

MessageBox.Show(buffer.ToString());
MessageBox.Show(buffer1.ToString());