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

C++ 从另一个线程最大化/最小化窗口,c++,winapi,fullscreen,minimize,maximize,C++,Winapi,Fullscreen,Minimize,Maximize,我正在试图找到一种正确的方法来最小化/最大化另一个线程拥有的窗口。我的目标窗口可以是全屏的,也可以不是全屏的(我应该能够最小化和最大化它,而不管它的状态如何)。我尝试过ShowWindow SW_最小化、SW_最大化、SW_强制最小化等多种组合。。。但我能实现的唯一结果是在最小化时恢复它(最大化),并使用ShowWindow(hWnd,SW\u RESTORE)全屏显示 下面是我用来检索句柄的代码: #include <Windows.h> #include <iostream

我正在试图找到一种正确的方法来最小化/最大化另一个线程拥有的窗口。我的目标窗口可以是全屏的,也可以不是全屏的(我应该能够最小化和最大化它,而不管它的状态如何)。我尝试过ShowWindow SW_最小化、SW_最大化、SW_强制最小化等多种组合。。。但我能实现的唯一结果是在最小化时恢复它(最大化),并使用
ShowWindow(hWnd,SW\u 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;
}
#包括
#包括
//我是一个控制台应用程序
int main(int argc,char*argv[]){
HWND HWND=FindWindow(文本(“MyWindowClass”),NULL;
如果(IsWindow(hWnd)){

std::cout首先尝试
ShowWindow
,然后调用
setforegroundindow

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);
        ...
    }
}

经过一整天的努力,我找到了一个解决方案,无论窗口的状态如何,它都可以最小化和最大化窗口:
Post/SendMessage

要使其最大化:

PostMessage(hWnd, WM_SYSCOMMAND, SC_RESTORE, 0);
要将其最小化,请执行以下操作:

PostMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);

谢谢,但它只有在窗口全屏时才工作。当它打开窗口时,会调用ShowWindow(hWnd,SW_RESTORE),但什么也没有发生。