EM_GETLINE错误C ++从文本框中获取最后一行

时间:2010-09-03 09:00:13

标签: c winapi em-getline

我在EM_GETLINE方面遇到了一个小问题。 我有一个文本框我想从中提取文本。该盒子一直在不断更新(这是一个不断更新的日志文件,底部的最后一条消息)。 我想要的只是最后一行。

我的代码:

        HWND hwnd = (HWND)0x00020A72;
 TCHAR param[1000];
 char display[1000];
 LONG lResult;
 lResult = SendMessage( hwnd, WM_GETTEXT, 500, (LPARAM)param);
 //lResult = SendMessage( hwnd, EM_STREAMOUT, SF_RTF, (LPARAM)param);
 //lResult = SendMessage( hwnd, EM_GETLINE, 1, (LPARAM)param); 
 wcstombs(display, param, 1000);

 printf( " %s\n", display );

正如你所看到的,我已经尝试过WM_GETTEXT(有效)。使用GETLINE时,它编译得很好(VS2010express)但返回垃圾。

非常愿意帮忙。 谢谢你的聆听。

3 个答案:

答案 0 :(得分:2)

此窗口属于另一个进程,对吗?我可以看到你对窗口把手进行了硬编码。不确定消息是否跨进程边界自动封送,只有系统消息是(WM_Xxx <0x400)。

自己编组需要OpenProcess,VirtualAllocEx分配缓冲区,WriteProcessMemory初始化它,SendMessage,ReadProcessMemory来读取缓冲区。加上清理。

答案 1 :(得分:1)

您应该要求最后一行不是第一行并为终止添加NULL,请尝试以下操作:

int last_line = SendMessage(hwnd, EM_GETLINECOUNT,0 ,0) - 1;
int size = SendMessage(hwnd, EM_GETLINE, (WPARAM)last_line, (LPARAM)param);
param[size] = 0;//EM_GETLINE does not add the NULL

答案 2 :(得分:0)

&#34;指向接收该行副本的缓冲区的长指针。缓冲区的第一个字指定可以复制到缓冲区的最大字符数&#34; http://msdn.microsoft.com/en-us/library/aa921607.aspx

*(WORD*) param = 1000