仅识别EnumDesktopWindows中的应用程序窗口

问题描述 投票:2回答:1

这是我的第一个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个回答
3
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.