无法在我的 C# 程序中使用 SendMessage_EX 两次

发布于 2024-11-29 07:27:33 字数 612 浏览 0 评论 0原文

我面临一个非常奇怪的问题,无法弄清楚错误出在哪里。我使用 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 行则不返回任何内容。

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

I am facing a very strange problem and couldn't figure out where's the mistake. I'm using SendMessage_EX to get a specified line's text:

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

then I call the method twice like this:

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);

It gets text of line 5 correctly but then for line 4, It returns nothing(buffer1 is empty).
If I reverse it and first get line 4 and then line 5, It returns the text of line 4 and nothing for line 5.

It's very strange and I'm sure I'm making a simple mistake, but where is the mistake?
I appreciate any help. :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

虐人心 2024-12-06 07:27:33

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());

The EM_GETLINE message wants the size of the buffer passed in the same parameter it uses for a buffer. I couldn't just set the 0 index of the StringBuilder without initializing it to some value (got an index exception).

This seems to work:

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());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文