我正在尝试从特定窗口中的文本框中获取文本。为此我使用SendMessage Api函数,我不知道这是否是核心方式:
SendMessage(hwnd, WM_GETTEXT, 0, 0);
但我不知道如何打印文本。对于msdn站点中的参数3和4,它说:附加的消息特定信息。所以我不知道我是否需要在0旁边传递别的东西。我也试过了:
SendMessage(hwnd, WM_GETTEXT, sizeof(text), LPARAM(text));
但它打印文本框的名称,我需要检索框内的文字?
我怎样才能做到这一点? SendMessage()是否使用正确的API函数?
谢谢。
编辑:
我省略说,我从一个窗口枚举子窗口,对我来说它看起来像一个文本框,你必须输入一个名字。我正在检索即时消息窗口的用户名,所以我无法将其与字符串进行比较,是文本框吗?
答案 0 :(得分:5)
您应该使用GetWindowText。更多信息here。
答案 1 :(得分:5)
再次阅读MSDN documentation。它没有为这些参数说“附加消息特定信息”:
wParam最大数量 要复制的字符,包括 终止空字符。
ANSI应用程序可能包含字符串 在缓冲区缩小尺寸(到一个 至少是wParam的一半 由于从ANSI转换为 Unicode格式。
lParam指向缓冲区的指针 是接收文本。
答案 2 :(得分:1)
此代码仅适用于本地代码:
char *szText;
szText = (char *)GlobalAlloc(GPTR, 255);
SendMessage(hEditControl, WM_GETTEXT, 255, (LPARAM)szText);
MessageBox(hWnd, szText, "It's your message", MB_OK | MB_TOPMOST);
GlobalFree((HGLOBAL)szText);