Использование GetAltTabInfo? - PullRequest
       0

Использование GetAltTabInfo?

3 голосов
/ 26 октября 2010

Я не могу использовать GetAltTabInfo. Возможно глупая ошибка, но что с этим не так?

HWND taskSwitcher = FindWindow(L"TaskSwitcherWnd", L"Task Switching");
ALTTABINFO altTabInfo = {};
altTabInfo.cbSize = sizeof(ALTTABINFO);
GetAltTabInfo(taskSwitcher, -1, &altTabInfo, NULL, 0);

Я убедился, что taskSwitcher является окном переключения задач после вызова FindWindow (независимо от того, видимое оно или нет). Все поля altTabInfo остаются 0 после вызова GetAltTabInfo, кроме cbSize, который был установлен равным 40 при назначении sizeof (ALTTABINFO). Я пробую это на машине с Windows 7.

Альтернативные методы извлечения количества окон?

Спасибо

Редактировать: Хорошо, я только что понял, что могу получить информацию об ошибке. Результирующее значение вызова GetAltTabInfo действительно равно 0, и GetLastError дает мне либо 1400 (недопустимый дескриптор окна), либо 1168 (элемент не найден), если я укажу NULL для параметра hwnd (в конце концов он был определен как __in_opt). Так что, думаю, я пропускаю не то окно. Что является правильным, если не тот, который возвращается FindWindow (L "TaskSwitcherWnd", L "Переключение задач")? MSDN сообщает мне только о параметре hwnd: «Это окно должно быть окном переключения приложений».

Ответы [ 3 ]

2 голосов
/ 26 октября 2010

Вы всегда должны проверять наличие ошибок при использовании функций Win32 API. GetAltTabInfo возвращает BOOL, вызывает GetLastError (), когда возвращает FALSE:

BOOL ok = GetAltTabInfo(hWnd, -1, &altTabInfo, NULL, 0);
if (!ok) {
    int err = GetLastError();
    Log(err);   // Or whatever you use
    return false;
}

Я думаю, вы увидите ошибку 1400 "Неверный дескриптор окна". На моей машине ни один из оконных дескрипторов, перечисленных EnumWindows (), не принят. Я бы сделал вывод, что этот API больше нельзя использовать, когда у вас включен Aero. Я не могу найти независимое подтверждение для этого.

0 голосов
/ 26 октября 2010

Что бы это ни стоило, как знал mokubai на https://superuser.com/questions/72946/disable-or-delay-alt-tab-aero-peek-effect-in-windows-7, вы можете фактически открыть окно alt tab старого стиля, видимое даже при включенной win 7 aero (левый alt + тап вправо alt + tab (..I 'я не шучу !!))В этом окне параметр hwnd в GetAltTabInfo не имеет значения, и в этих условиях вы все равно сможете получить информацию о вкладке Alt.

0 голосов
/ 26 октября 2010

Я не знаю, как получить GetAltTabInfo, но вы можете использовать EnumWindow() для поиска окон верхнего уровня и их подсчета. это должно сказать вам, сколько окон в окне Alt-Tab ...

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