我无法获得Skype的窗口标题。以下代码返回一个空字符串:
std::wstring get_window_title(HWND hwnd)
{
wchar_t window_title[256];
SendMessageW(hwnd, WM_GETTEXT, (WPARAM)256, (LPARAM)window_title);
return window_title;
}
Window的句柄有效。
我是否正确使用此功能?
提前致谢。
答案 0 :(得分:1)
我测试了您的代码,无法重现该问题。问题不在于您展示的代码段,而在于获取窗口句柄。我建议我们投票关闭这篇文章,你可以问一个关于窗口句柄的新问题。
为了记录,我使用SendMessage
和GetWindowText
进行了测试。
答案 1 :(得分:0)
您的代码实际上运行正常,模块化您不检查错误的事实。您需要检查SendMessageW
返回的值。此返回值表示复制到缓冲区的字符数。
代码在运行时失败的最可能原因是您提供的窗口句柄无效或不正确。
答案 2 :(得分:-1)
看起来我需要在这种情况下使用GlobalAlloc函数。
答案 3 :(得分:-2)
尝试GetWindowText
,这可以解决尝试向另一个进程中的窗口发送邮件的一些困难。
WM_GETTEXT
要求其他进程写入地址空间而不是自己的缓冲区,这是不可行的。一些消息将在进程地址空间之间封送这些缓冲区,但我认为WM_GETTEXT
不是其中之一。
更新:评论中建议WM_GETTEXT
是将在进程地址空间之间封送字符串的消息之一。我没有找到这方面的权威来源,并且发现许多非权威的帖子都声称它既有,有但没有。无论如何,GetWindowText
被记录为适用于其他进程中的非子窗口,因此它仍然是解决该问题的可行方案。