我和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时,它会编译nice (VS2010express),但会返回垃圾。
会非常感谢你的帮助。谢谢你的倾听。
发布于 2010-09-03 19:12:57
这个窗口属于另一个进程,对吗?我可以看到你硬编码了窗口句柄。不确定消息是否会跨进程边界自动封送,只有系统消息会(WM_Xxx < 0x400)。
自己封送它需要OpenProcess,VirtualAllocEx来分配缓冲区,WriteProcessMemory来初始化它,SendMessage,ReadProcessMemory来读取缓冲区。外加清理。
发布于 2010-09-03 18:35:51
您应该询问最后一行,而不是第一行,并为终止添加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
发布于 2014-12-01 05:00:12
“指向接收行副本的缓冲区的长指针。缓冲区的第一个字指定可以复制到缓冲区的最大字符数”http://msdn.microsoft.com/en-us/library/aa921607.aspx
*(WORD*) param = 1000
https://stackoverflow.com/questions/3634298
复制相似问题