- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
平台:Windows 7 64 位。
首先,Windows API IsIconic()总是返回错误。窗口是最大化、正常 还是最小化 无关紧要(IsIconic()
应返回 true) .
该窗口属于另一个进程,已使用 enumWindows()
检索这是我的测试代码的一小段摘录。
TCHAR WndCaption[100];
TCHAR NewCaption[] = TEXT("My Window handle is valid");
BOOL res;
GetWindowText(MyHWND,WndCaption,100);
SetWindowText(MyHWND,NewCaption);
// This always return 0, no matter what state the window is in.
res = IsIconic(MyHWND);
if(res) {
...
}
我知道窗口句柄是有效的,因为我可以获取和设置窗口的标题文本。然而,Is Iconic()
函数始终返回 0(假),即使窗口已被最小化。
但是,如果我们将 IsIconic()
更改为 IsWindowVisible()
,它会在窗口最小化 时正确报告 false,而在最小化时正确报告 true 最大化 或正常。
TCHAR WndCaption[100];
TCHAR NewCaption[] = TEXT("My Window handle is valid");
BOOL res;
GetWindowText(MyHWND,WndCaption,100);
SetWindowText(MyHWND,NewCaption);
// This works correctly.
res = IsWindowVisible(MyHWND);
if(!res) {
// This always fail
OpenIcon(MyHWND);
}
所以现在当我可以检测到正在最小化的窗口时,我想恢复它。 IsIconic 的对应物 OpenIcon()什么也没做。它返回 true,表示操作成功,但窗口仍最小化。事实上,无论窗口处于什么状态,它总是返回 true。
那么让我们试试老办法。
TCHAR WndCaption[100];
TCHAR NewCaption[] = TEXT("My Window handle is valid");
BOOL res;
GetWindowText(MyHWND,WndCaption,100);
SetWindowText(MyHWND,NewCaption);
// Only works if the window wasn't minimized by clicking the minimize button
res = ShowWindow(MyHWND,SW_MINIMIZE);
res = ShowWindow(MyHWND,SW_NORMAL);
res = ShowWindow(MyHWND,SW_MAXIMIZE);
如果窗口处于正常 或最大化 状态,它将首先将其最小化,然后再次将其恢复,然后再最大化。但是,如果我在通过单击最小化按钮将窗口最小化时运行该程序,则什么也不会发生。它不会恢复它或最大化它。
如果我通过单击最小化按钮将其最小化,感觉窗口变得无响应。经过几个小时的搜索,我只找到了有类似问题但没有解决方案的帖子。
谁能帮我弄清楚如何在通过最小化按钮将窗口最小化后恢复窗口(由另一个进程拥有)。
最佳答案
在对所讨论的外部应用程序一无所知的情况下,我的猜测是您正在操作的窗口不是最小化到任务栏的实际窗口,这可以解释为什么 IsIconic()
总是false 但 IsWindowVisible()
不同。
这并不少见,尤其是在 Vista 之前编写的遗留应用程序中,或者在更新以支持 Vista 之前使用旧版本框架(如 Borland 的 VCL)的应用程序中,有一个顶级隐藏窗口拥有同一应用程序中的其他窗口,尤其是主窗口。一个原因(除其他外)是在 Microsoft 创建 API 来控制它之前,将多个窗口分组在同一个任务栏按钮上。
在这样的应用程序中,当“主”窗口被“最小化”时,应用程序会拦截该操作,隐藏“主”窗口,并最小化所有者窗口。当“主”窗口被“恢复”时,应用程序将恢复所有者窗口,然后显示“主”窗口。
尝试检查是否GetWindow(MyHWND, GW_OWNER)
返回一个 HWND
,如果是,则检查 IsIconic()
是怎么说的。
Vista 对应用程序与任务栏和 Alt+Tab 对话框的交互方式进行了一些重大更改。一些自 Win95 以来一直正确且工作正常的编码技术和假设在 Vista 中不再正确工作。一些应用程序和框架适应了这些变化,一些则没有。
关于c++ - IsIconic() 总是返回 false 而 OpenIcon() 从不打开窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26352976/
平台:Windows 7 64 位。 首先,Windows API IsIconic()总是返回错误。窗口是最大化、正常 还是最小化 无关紧要(IsIconic() 应返回 true) . 该窗口属于
我是一名优秀的程序员,十分优秀!