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

时间:2019-07-09 13:37:40

标签: delphi winapi delphi-10.3-rio minimized

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

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

两个替代方案中哪个更可取?还是它们在所有情况下都一样好?

2 个答案:

答案 0 :(得分:8)

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

IsIconic function

  

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

Window Features

  

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

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

贴上IsIconic(),这是Microsoft专门为此目的提供的API。

答案 1 :(得分:-1)

“最佳”选择正在呼唤 (GetWindowLong(hwnd, GWL_STYLE) & WS_MINIMIZE)

我检查了反汇编程序中的 IsIconic GetWindowPlacement 函数,并且都在内部比较带有 WS_MINIMIZE 标志的窗口样式,以确定窗口是否最小化。

相关问题