我需要检测特定窗口是否已最小化。为此,我发现了两个功能:
1。
function PAIsWindowMinimized(h: HWND): Boolean;
// Detects whether a window is minimized or not
var
wp: Winapi.Windows.WINDOWPLACEMENT;
begin
wp.length := SizeOf(Winapi.Windows.WINDOWPLACEMENT);
Winapi.Windows.GetWindowPlacement(h, @wp);
Result := wp.showCmd = Winapi.Windows.SW_SHOWMINIMIZED;
end;
2。
// Alternative (https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-isiconic):
Winapi.Windows.IsIconic(h);
两个替代方案中哪个更可取?还是它们在所有情况下都一样好?
答案 0 :(得分:8)
IsIconic()
是检查窗口是否最小化的正确且有据可查的方法:
确定指定的窗口是否最小化(标志性)。
IsZoomed
和IsIconic
函数分别确定给定窗口是最大化还是最小化。GetWindowPlacement
函数检索窗口的最小化,最大化和还原位置,并确定窗口的显示状态。
使用其他任何东西最多都是hack。 IsIconic()
和GetWindowPlacement()
内部检查WS_MINIMIZE
窗口样式的HWND只是一个实施细节。使用这些功能而不是手动检查窗口样式的开销可以忽略不计。
贴上IsIconic()
,这是Microsoft专门为此目的提供的API。
答案 1 :(得分:-1)
“最佳”选择正在呼唤
(GetWindowLong(hwnd, GWL_STYLE) & WS_MINIMIZE)
。
我检查了反汇编程序中的 IsIconic 和 GetWindowPlacement 函数,并且都在内部比较带有 WS_MINIMIZE 标志的窗口样式,以确定窗口是否最小化。