【发布时间】:2011-08-15 09:14:06
【问题描述】:
我在全局 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:
当文件已存在时无法创建该文件。
错误不是随机的:我总是在同一个应用程序打开同一种窗口时得到它,但对于所有其他窗口,它似乎工作正常。
【问题讨论】:
-
您是否尝试在另一个应用程序中检索编辑控件的文本?
-
不,我正在尝试获取窗口的标题
-
这是我们系统上可以测试的窗口吗?
-
在调用
GetWindowText之前尝试调用SetLastError(666)。如果您将开始返回 666,则可能意味着GetWindowText被一个 api 钩子拦截,该钩子阻止读取某个窗口并且不会打扰设置正确的错误代码。 -
也许他们的表格窗口是一个编辑控件,只是修改到足以显示为常规窗口。或者它可能只是在模仿一个真实的窗口,根本不使用 SetWindowText()。 Spy++ 告诉你关于窗口的什么?