GetWindowText () возвращает пустую строку и странную ошибку - PullRequest
1 голос
/ 15 августа 2011

Я использую следующий код внутри глобальной процедуры подключения 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 голосов
/ 15 августа 2011

Возможно, у вас нет прав на получение текста из определенных окон в Windows Vista и выше.

Я предполагаю, что ERROR_ALREADY_EXISTS исходит из вашего файла журнала, когда вы печатаете "Ошибка GetWindowText ():". Вы должны получить код ошибки, прежде чем делать что-либо еще.

Другая возможность состоит в том, что окно возвращает 0 из своего обработчика WM_GETTEXT без установки последней ошибки. Как гласит документация GetWindowText, если вы вызываете его в окне, принадлежащем тому же процессу, он получает текст, отправляя это сообщение. Поскольку вы вызываете функцию из ловушки, вы можете быть в том же процессе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...