检测 window 最小化状态的最佳替代方案?

Best alternative for detecting Minimized state of a window?

我需要检测特定 window 是否已最小化。为此,我找到了两个函数:

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

两种选择中哪一种更可取?或者它们在所有情况下都同样出色?

'best' 备选方案正在调用 (GetWindowLong(hwnd, GWL_STYLE) & WS_MINIMIZE).

我检查了反汇编程序中的 IsIconicGetWindowPlacement 函数,并且都在内部将 windows 样式与 WS_MINIMIZE 标志以确定 window 是否被最小化。

IsIconic() 是检查 window 是否最小化的 正确且有记录的 方法:

IsIconic function

Determines whether the specified window is minimized (iconic).

Window Features

The IsZoomed and IsIconic functions determine whether a given window is maximized or minimized, respectively. The GetWindowPlacement function retrieves the minimized, maximized, and restored positions for the window, and also determines the window's show state.

使用其他任何东西充其量只是一种技巧。 IsIconic()GetWindowPlacement() 在内部检查 WS_MINIMIZE window 样式的 HWND 只是一个 实现细节 。使用这些函数而不是手动检查 window 样式的开销可以忽略不计。

坚持使用 IsIconic(),它是 Microsoft 专门为此目的提供的 API。