我正在尝试在应用程序中获取文本字段的状态。但是我没有让它发挥作用。我正在使用“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;
答案 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。