GetWindowText()返回空字符串和奇怪的错误

时间:2011-08-15 09:14:06

标签: c++ winapi

我在全局CBT钩子程序中使用以下代码:

TCHAR title[256];
int getT = GetWindowText(hWnd, title, 256);
if (getT == 0) {
    int err = GetLastError();
    logFile << "Error GetWindowText(): " << err << endl;
} else {
    logFile << "getT = " << getT << endl;
}

问题是,对于某些窗口,GetWindowText()函数工作正常,我得到正确的窗口标题,但对于其他一些它返回0,我得到一个空字符串。 GetLastError()返回183,即ERROR_ALREADY_EXISTS:

  

当该文件已存在时无法创建文件。

错误不是随机的:我总是使用同一个应用程序打开的同一种窗口来获取它,但对于所有其他窗口它似乎工作正常。

1 个答案:

答案 0 :(得分:0)

您可能无权从Windows Vista及更高版本的某些窗口检索文本。

我的猜测是,当您打印“Error GetWindowText()时,ERROR_ALREADY_EXISTS来自您的日志文件:”。在执行任何其他操作之前,您应首先获取错误代码。

另一种可能性是窗口从WM_GETTEXT处理程序返回0而不设置最后一个错误。正如GetWindowText文档所述,如果您在属于同一进程的窗口上调用它,它将通过发送此消息来检索文本。由于您是从钩子调用该函数,因此您可能处于相同的过程中。