1

如何通过::FindWindowor获取 Windows 7 跳转列表窗口::EnumWindows

什么是班级或父母?

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

谢谢你。

跳转列表

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

4

2 回答 2

3

这是一种类似于 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);
    }
}

在显示每个窗口时,它会在控制台(或当时的任何标准输出)输出中显示为 的类名DV2ControlHostJump List. 但是,如果您想与之交互,我相信有一个更加结构化的 API,尽管我可能弄错了。

于 2013-05-29T21:23:36.023 回答
2

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

跳转列表

于 2013-05-29T21:07:53.493 回答