[英]How can I restore a winapi window if it's minimized?
我尝试了许多功能,例如ShowWindow
和IsWindowVisible
,以便至少在窗口最小化时尝试给出结果,更不用说还原它了。 无论窗口是否最小化,这些函数都会不断返回false。 我也尝试过将GetWindowPlacement
与SetWindowPlacement
一起使用,但没有成功。 我的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.