我在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)但返回垃圾。
非常愿意帮忙。 谢谢你的聆听。
答案 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