无法获得窗口标题

时间:2014-09-01 14:06:59

标签: c++ winapi

我无法获得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的句柄有效。

我是否正确使用此功能?

提前致谢。

4 个答案:

答案 0 :(得分:1)

我测试了您的代码,无法重现该问题。问题不在于您展示的代码段,而在于获取窗口句柄。我建议我们投票关闭这篇文章,你可以问一个关于窗口句柄的新问题。

为了记录,我使用SendMessageGetWindowText进行了测试。

答案 1 :(得分:0)

您的代码实际上运行正常,模块化您不检查错误的事实。您需要检查SendMessageW返回的值。此返回值表示复制到缓冲区的字符数。

代码在运行时失败的最可能原因是您提供的窗口句柄无效或不正确。

答案 2 :(得分:-1)

看起来我需要在这种情况下使用GlobalAlloc函数。

答案 3 :(得分:-2)

尝试GetWindowText,这可以解决尝试向另一个进程中的窗口发送邮件的一些困难。

WM_GETTEXT要求其他进程写入地址空间而不是自己的缓冲区,这是不可行的。一些消息将在进程地址空间之间封送这些缓冲区,但我认为WM_GETTEXT不是其中之一。

更新:评论中建议WM_GETTEXT是将在进程地址空间之间封送字符串的消息之一。我没有找到这方面的权威来源,并且发现许多非权威的帖子都声称它既有,有但没有。无论如何,GetWindowText被记录为适用于其他进程中的非子窗口,因此它仍然是解决该问题的可行方案。