检测窗口最小化状态的最佳选择?

use*_*348 0 delphi winapi minimized delphi-10.3-rio

我需要检测特定窗口是否已最小化。为此,我发现了两个功能:

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;
Run Code Online (Sandbox Code Playgroud)

2。

// Alternative (https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-isiconic):
Winapi.Windows.IsIconic(h);
Run Code Online (Sandbox Code Playgroud)

两种选择中哪一种更可取?还是它们在所有情况下都一样好?

Rem*_*eau 8

IsIconic()是检查窗口是否最小化的正确且有据可查的方法:

IsIconic函数

确定指定的窗口是否最小化(图标)。

窗户功能

IsZoomedIsIconic功能确定给定的窗口是否被最大化或最小化,分别。该GetWindowPlacement函数检索窗口的最小化,最大化和还原位置,并确定窗口的显示状态。

使用其他任何东西最多都是hack。这样的事实IsIconic(),并GetWindowPlacement()在内部检查HWND的WS_MINIMIZE窗口样式只是一个实现细节。使用这些功能而不是手动检查窗口样式的开销可以忽略不计。

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