WM_GETTEXT用法

时间:2012-02-08 19:20:47

标签: windows visual-c++ visual-studio-2005 sendmessage

我正在尝试在应用程序中获取文本字段的状态。但是我没有让它发挥作用。我正在使用“SendMessage”获取“WM_GETTEXT”,我将内容保存为char *。

我将char *输出到一个文件,但我只返回“D”。这就是我现在所拥有的:

LRESULT result;
char * output = (char*)malloc(1024);

result = SendMessage(hwnd,WM_GETTEXT,1024,(LPARAM)output);

ofstream file("test.txt");
file <<  *output;
file.close();

delete [] output;

3 个答案:

答案 0 :(得分:5)

指针概念

file&lt;&lt; *输出;将打印字符串数组的第一个元素

file&lt;&lt;输出;打印整个字符串

答案 1 :(得分:0)

C#代码:

public const uint WM_GETTEXT = 0xD;
const int bufferSize = 10000;
StringBuilder sb = new StringBuilder(bufferSize);
SendMessageGetText(handle, WM_GETTEXT, new UIntPtr(bufferSize), sb);

Console.WriteLine(sb.ToString());

对我合作!

答案 2 :(得分:0)

索菲亚的回答是正确的。但是,Visual Studio项目的默认设置是创建Unicode项目。如果您的项目是Unicode而不是MBCS,您将只获得第一个字母。

您是否检查过从WM_GETTEXT返回的缓冲区以验证它是否包含整个字符串?

如果没有,请尝试将输出变量声明为TCHAR *(通用)或wchar_t *,并查看缓冲区中的结果。

P.S。用malloc分配内存并用delete释放它是不好的形式。您应该使用malloc / free对或new / delete对。分配char缓冲区更安全的方法是使用std :: string或使用std :: wstring作为宽字符串。

p.p.s尝试确保您的项目设置适用于多字节项目,而不是Unicode项目。然后索菲亚的答案中的所有内容都将起作用。

还有一件事......只需使用GetWindowText()API而不是SendMessage。这就是它存在的原因所以你不必经历一个指向LPARAM或WPARAM的指针。如果您的类型不匹配,它会更加类型安全并且会给您一个编译时错误(优于运行时错误) - 特别是对于Unicode / MBCS和wchar_t / char。