我是一名化学新手,正在编写脚本以帮助我自动处理一些数据。我现在正在使用的代码涉及使用WM_GETTEXT来获取窗口句柄的标题。但是,现在char缓冲区仅捕获单个字符,而不是整个标题。似乎几年前有人遇到类似的问题(链接:http://www.cplusplus.com/forum/beginner/58207/),这表明该问题可能与混合数据类型有关。我尝试按照建议的方式切换到TCHAR,但这样做却无法编译(收到无法从“ const char [1]转换为TCHAR [254]的错误)。这是我正在使用的代码:
int textLen = (int)SendMessage(windowHandle, WM_GETTEXTLENGTH, 0, 0);
std::cout << "The handle length is: " << textLen << std::endl;
const int bufferSize = 254;
char textBuffer[bufferSize] = "";
SendMessage(windowHandle, WM_GETTEXT, (WPARAM)bufferSize, (LPARAM)textBuffer);
std::cout << "The handle title is: " << textBuffer << std::endl;
有人有什么建议吗?我正在Microsoft Visual Studio中工作,我认为这可能是问题的一部分,但是我不确定如何解决它。
答案 0 :(得分:0)
尝试调用SendMessageA
而不是SendMessage
-表示您使用的是char而不是WCHAR(即TCHAR可能真正使用过的字符)。
或者,使用std::cout
的宽字符版本,即std::wcout
,并始终使用TCHAR / WCHAR(包括textBuffer声明)。
实质上,您是在将宽弦与老式弦混合在一起。
答案 1 :(得分:0)
另一个答案是正确的,但是您可能要考虑使用GetWindowText而不是发送消息。
使用GetWindowText,无论您使用-A或-W后缀,都将获得某种类型的安全性,这可能首先帮助您避免了此问题。
在某些情况下,即使拥有目标窗口的进程挂起或未及时响应消息,GetWindowText仍可以返回标题。