如何查找跳转列表窗口?

时间:2013-05-29 20:55:54

标签: c++ windows windows-7 aero taskbar

如何通过::FindWindow::EnumWindows

获取Windows 7跳转列表窗口

什么是班级或家长?

我不能间谍++,因为如果失去焦点就会消失。

谢谢。

Jump list

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

2 个答案:

答案 0 :(得分:2)

打开spy ++,打开跳转列表,单击spy ++上的刷新按钮。

Jump list

答案 1 :(得分:2)

这是一种类似于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,虽然我可能会弄错。