【问题标题】:How to find jump lists window?如何找到跳转列表窗口?
【发布时间】:2013-05-29 20:55:53
【问题描述】:

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

它是什么类或父类?

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

谢谢。

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

【问题讨论】:

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


    【解决方案1】:

    这是一种类似于 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,尽管我可能弄错了。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这只有在你已经知道要查找什么的情况下才有效:) Spy 的查找窗口工具会从跳转列表中移除焦点并关闭它。谢谢。
      • 其实是在当前存储的列表中查找窗口搜索,所以无论如何都需要刷新,只要在跳转窗口还在显示的情况下这样做,就可以搜索到。
      • 不会刷新也需要关注 Spy 窗口吗?
      • 是的,但是会在跳转列表被破坏之前刷新。
      猜你喜欢
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-10
      相关资源
      最近更新 更多