【发布时间】:2019-07-09 13:37:40
【问题描述】:
我需要检测特定窗口是否被最小化。为此,我找到了两个函数:
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);
这两种选择中哪一种更可取?还是它们在所有情况下都同样出色?
【问题讨论】:
-
第三种方法呢:GetWindowLong(hwnd, GWL_STYLE) & WS_MINIMIZE ?
-
IsIconic 当然更好,因为它简洁。这就是为什么这个问题是基于意见的,其他人可能有不同的观点。一般来说,任何最佳问题都是基于意见的。
-
恐怕这是典型的“基于意见”的问题。也许您的意思是,“这两个函数之间是否存在语义差异”。
-
@IInspectable:你确定吗?还是与 WS_MINIMIZEBOX 混淆了?
-
@Iins - 最小化窗口的定义是具有 WS_MINIMIZE 标志的窗口。在 MS documentation 上阅读。因此,没有标志的窗口不会被最小化。显然,我无法通过阅读文档或其他任何方式为您提供任何指导。祝你学习 Winapi 好运。
标签: delphi winapi delphi-10.3-rio minimized