c++ - 从另一个线程最大化/最小化窗口

标签 c++ winapi fullscreen minimize maximize

我正在尝试找出最小化/最大化另一个线程拥有的窗口的正确方法。我的目标窗口可以全屏也可以不全屏(无论其状态如何,我都应该能够最小化和最大化它)。我已经尝试了 ShowWindow SW_MINIMIZE、SW_MAXIMIZE、SW_FORCEMINIMIZE 等的各种组合...但我能够实现的唯一结果是在它最小化时恢复它(最大化)并使用 ShowWindow(hWnd, SW_RESTORE) 全屏

这是我用来检索句柄的代码:

#include <Windows.h>
#include <iostream>

// I'm a console application
int main(int argc, char* argv[]) {
    HWND hWnd = FindWindow(TEXT("MyWindowClass"), NULL);
    if(IsWindow(hWnd)) {
        std::cout << "Window found!" << std::endl;
        SetForegroundWindow(hWnd); // I'll give focus to my window. This is always working.
        if(IsIconic(hWnd))
            ShowWindow(hWnd, SW_RESTORE); // This is working only if the window is minimized while in fullscreen mode
        Sleep(3000);
        ShowWindow(hWnd, SW_MINIMIZE); // Not working. SW_FORCEMINIMIZE, SW_HIDE etc are not working either.
    }
    return 0;
}

最佳答案

首先尝试ShowWindow,然后调用SetForegroundWindow:

void show_and_setforeground(HWND hwnd)
{
    WINDOWPLACEMENT place;
    memset(&place, 0, sizeof(WINDOWPLACEMENT));
    place.length = sizeof(WINDOWPLACEMENT);
    GetWindowPlacement(hwnd, &place);

    switch (place.showCmd)
    {
    case SW_SHOWMAXIMIZED:
        ShowWindow(hwnd, SW_SHOWMAXIMIZED);
        break;
    case SW_SHOWMINIMIZED:
        ShowWindow(hwnd, SW_RESTORE);
        break;
    default:
        ShowWindow(hwnd, SW_NORMAL);
        break;
    }

    SetForegroundWindow(hwnd);
}

除了 IsWindow(hWnd) 之外,您可能还想使用 IsWindowVisible(hWnd),因为某些程序使用不可见的窗口,这些窗口不应该被使用。

hwnd = FindWindow(TEXT("MyWindowClass"), NULL);
if (IsWindow(hwnd))
{
    if(IsWindowVisible(hwnd))//optional
    {
        show_and_setforeground(hwnd);
        ...
    }
}

关于c++ - 从另一个线程最大化/最小化窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31224092/

相关文章:

html - 强制 div 在移动设备上占据整个屏幕? CSS, HTML

c++ - 为什么这不对转换构造函数进行隐式转换?

c++ - 放置复杂物体

c++ - 如何将命名空间添加到 Lua?

c++ - 我的函数操作 std::string 产生了意想不到的结果

javascript - Wordpress 推荐 slider 及其与页脚的链接

SwiftUI:NavigationBar 和 TabBar 的全屏 View

c++ - 在 Windows 中签署结构并在 Linux 中读取它

windows - windows如何唯一识别一个USB设备?

c# - Windows 7左键单击时钟弹出窗口