首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EM_GETLINE错误C++从文本框中获取最后一行

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

Stack Overflow用户
提问于 2010-09-03 17:00:13
回答 3查看 2K关注 0票数 0

我和EM_GETLINE有个小问题。我有一个要从中提取文本的文本框。这个框一直在更新(这是一个不断更新的日志文件,最后一条消息在底部)。我只想要最后一句话。

我的代码:

代码语言:javascript
运行
复制
        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),但会返回垃圾。

会非常感谢你的帮助。谢谢你的倾听。

EN

回答 3

Stack Overflow用户

发布于 2010-09-03 19:12:57

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

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

票数 2
EN

Stack Overflow用户

发布于 2010-09-03 18:35:51

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

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2014-12-01 05:00:12

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

代码语言:javascript
运行
复制
*(WORD*) param = 1000
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3634298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档