【问题标题】:Identify only application windows from EnumDesktopWindows从 EnumDesktopWindows 中仅识别应用程序窗口
【发布时间】:2019-08-14 00:13:49
【问题描述】:

这是我的第一个 C++ 应用程序。我在 C++ 或 Windows 应用程序编程方面完全没有经验,因此感谢任何反馈/帮助。如果我在代码中犯了任何错误或没有遵循最佳实践,请告诉我。

我正在尝试编写一个复制 WIN + D 行为的 C++ 程序 键盘快捷键,但只影响鼠标在显示器上的窗口。

尽管检查了IsWindowVisible()IsIconic(),但仍有一些系统窗口被最小化和最大化,从而导致奇怪的故障,例如:

  • 桌面上的所有图标都会最小化,并出现一个灰色条
  • Microsoft Edge 的空白实例打开
  • Windows 设置应用突然出现

最小化窗口的代码:

static std::stack<HWND> minimizedWindowPointers;
Monitors monitors;
RECT activeMonitorRect;

static BOOL CALLBACK windowEnumerator(HWND w, LPARAM l){
    if(!IsWindowVisible(w) || IsIconic(w) || getWindowTitle(w).size() == 0) return true;

    RECT r;
    GetWindowRect(w, &r);
    if(doRectsIntersect(r, activeMonitorRect)){
        SendMessage(w, WM_SYSCOMMAND, SC_MINIMIZE, 0);
        minimizedWindowPointers.push(w);
    }

    return true;
}
void minimizeWindowsOnActiveMoniter(){
    if(monitors.getRectOfMonitorWithPointer(&activeMonitorRect)) return;

    EnumDesktopWindows(NULL, windowEnumerator, NULL);

    areWindowsMinimized = true;
}
void maximizeWindowsOnActiveMoniter(){
    HWND w;
    for(int i = minimizedWindowPointers.size(); i > 0; i--){
        w = minimizedWindowPointers.top();
        minimizedWindowPointers.pop();
        if(IsIconic(w)){
            SendMessage(w, WM_SYSCOMMAND, SC_RESTORE, 0);
            std::wcout << "MAXIMIZING: " << getWindowTitle(w) << std::endl;
        }
    }

    areWindowsMinimized = false;
}

我正在运行带有 Visual Studio 19 Preview 的 Windows 10 Pro。

【问题讨论】:

    标签: c++ visual-c++ keyboard-shortcuts hotkeys


    【解决方案1】:

    GetWindowLong 可以通过 GWL_STYLE 获取窗口标志。检查 WS_CAPTION 和 WS_MINIMIZEBOX。我还会再次检查 WS_VISIBLE 以获得良好的衡量标准。

    【讨论】:

    • 感谢您的回答,但根据documentation:此功能已被GetWindowLongPtr 功能取代。
    • @KartikSoneji:“如果您正在检索指针或句柄”,我们不是。
    • 谢谢!这解决了问题。这是第一次用 C++ 编程,我完全不知道“如果你正在检索指针或句柄”这句话是什么意思。
    猜你喜欢
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 2010-11-23
    • 2019-10-10
    • 1970-01-01
    相关资源
    最近更新 更多