Как найти окно списков переходов?

Как получить окно списка переходов Windows 7 через ::FindWindow или ::EnumWindows?

Какой это класс или родитель?

Я не могу шпионить ++, потому что он исчезает, если теряет фокус.

Спасибо.

Список переходов

http://msdn.microsoft.com/en-us/library/windows/desktop/aa511446.aspx


person vt.    schedule 29.05.2013    source источник


Ответы (2)


Откройте spy++, откройте список прыжков, нажмите кнопку обновления на spy++.

Список переходов

person riv    schedule 29.05.2013
comment
Это работает только в том случае, если вы уже знаете, что искать :) Инструмент Spy's Find Window удаляет фокус из списка переходов, и он закрывается. Спасибо. - person vt.; 30.05.2013
comment
На самом деле, найдите поиск окон в текущем сохраненном списке, поэтому вам все равно нужно обновить его, и пока вы делаете это, пока окно перехода все еще отображается, вы сможете искать его. - person riv; 30.05.2013
comment
Разве обновление не потребует также фокуса на окне Spy? - person vt.; 30.05.2013
comment
Да, но он обновляется перед уничтожением списка переходов. - person riv; 30.05.2013

Вот способ, похожий на технику Spy++, чтобы найти его в коде, как только он будет показан, используя перехватчик событий:

void CALLBACK WinEventProc(HWINEVENTHOOK, DWORD, HWND hwnd, LONG, LONG, DWORD, DWORD) {
    std::wstring className(256, L'\0');
    std::wstring windowText;

    windowText.resize(GetWindowTextLengthW(hwnd) + 1);
    GetWindowTextW(hwnd, &windowText[0], windowText.size());
    windowText = windowText.c_str();

    GetClassNameW(hwnd, &className[0], className.size());
    className = className.c_str();

    std::wcout << "Class: \"" << className << "\"\n";
    std::wcout << "Window: \"" << windowText << "\"\n";
}

int main() {
    HWINEVENTHOOK hWinEventHook = SetWinEventHook(
        EVENT_OBJECT_SHOW, EVENT_OBJECT_SHOW, 
        nullptr, WinEventProc, 
        0, 0, 
        WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS
    );

    MSG msg;
    while (GetMessage(&msg, nullptr, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    if (hWinEventHook) {
        UnhookWinEvent(hWinEventHook);
    }
}

При отображении каждого окна оно появляется в консоли (или в любом другом стандартном выводе в данный момент) в виде имени класса DV2ControlHost и текста Jump List. Однако, если вы хотите взаимодействовать с ним, я считаю, что есть гораздо более структурированный API, хотя я могу ошибаться.

person chris    schedule 29.05.2013