gpt4 book ai didi

c++ - 仅识别来自 EnumDesktopWindows 的应用程序窗口

转载 作者:搜寻专家 更新时间:2023-10-31 01:26:30 24 4
gpt4 key购买 nike

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

我正在尝试编写一个 C++ 程序来复制 WIN + D 的行为键盘快捷方式,但仅影响使用鼠标的监视器上的窗口。

尽管检查了 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 预览版的 Windows 10 专业版。

最佳答案

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

关于c++ - 仅识别来自 EnumDesktopWindows 的应用程序窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55309259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com