繁体   English   中英

如果最小化了winapi窗口,如何恢复?

[英]How can I restore a winapi window if it's minimized?

我尝试了许多功能,例如ShowWindowIsWindowVisible ,以便至少在窗口最小化时尝试给出结果,更不用说还原它了。 无论窗口是否最小化,这些函数都会不断返回false。 我也尝试过将GetWindowPlacementSetWindowPlacement一起使用,但没有成功。 我的HWND使用FindWindow(TEXT("Chrome_WidgetWin_1"), NULL);找到Chrome FindWindow(TEXT("Chrome_WidgetWin_1"), NULL); 这是成功的,但如果窗口已最小化,并且过去10个小时没有任何显示,我想测试/恢复该窗口。

Chrome有一个不可见的同名窗口。 仅需要跳过不可见的窗口。 事后看来,这并不是什么谜。

void show(HWND hwnd)
{
    //ShowWindow(hwnd, SW_NORMAL);
    //SetForegroundWindow(hwnd);
    //We can just call ShowWindow & SetForegroundWindow to bring hwnd to front. 
    //But that would also take maximized window out of maximized state. 
    //Using GetWindowPlacement preserves maximized state
    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);
}

int WINAPI WinMain(HINSTANCE hinst, HINSTANCE, LPSTR cmdline, int nshow)
{
    const wchar_t *classname = L"Chrome_WidgetWin_1";

    HWND hwnd = NULL;
    for (;;)
    {
        hwnd = FindWindowEx(0, hwnd, classname, 0);
        if (!hwnd) break;

        //skip Chrome's invisible winodw
        if (IsWindowVisible(hwnd))
        {
            wchar_t buf[260];
            GetWindowText(hwnd, buf, 260);
            OutputDebugString(buf);
            OutputDebugString(L"\n");

            show(hwnd);
            break;
        }
    }

    return 0;
}

我编辑了很多时间。 以前的编辑在这里: https : //stackoverflow.com/posts/29837548/revisions

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM