0

我在使用 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)但返回垃圾。

非常感谢您的帮助。谢谢收听。

4

3 回答 3

2

这个窗口属于另一个进程,对吧?我可以看到您对窗口句柄进行了硬编码。不太确定消息是否会跨进程边界自动封送,只有系统消息是(WM_Xxx < 0x400)。

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

于 2010-09-03T11:12:57.367 回答
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
于 2010-09-03T10:35:51.037 回答
0

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

*(WORD*) param = 1000
于 2014-11-30T21:00:12.370 回答