【问题标题】:Best alternative for detecting Minimized state of a window? [closed]检测窗口最小化状态的最佳选择? [关闭]
【发布时间】: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


【解决方案1】:

IsIconic() 是检查窗口是否最小化的正确且记录在案的方法:

IsIconic function

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

Window Features

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

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

坚持IsIconic(),它是微软专门为此目的提供的API。

【讨论】:

    【解决方案2】:

    “最好”的选择是调用 (GetWindowLong(hwnd, GWL_STYLE) & WS_MINIMIZE).

    我检查了反汇编程序中的 IsIconicGetWindowPlacement 函数,并在内部将窗口样式与 WS_MINIMIZE 标志进行比较以确定窗口是否已最小化。

    【讨论】:

    • 写这篇文章时,我得到了很多编译器错误。
    • 修改为布尔帕斯卡表达式。但无论如何,IMO 的答案都是不正确的,除非你在一个循环中检查数百个窗口......
    • @SertacAkyuz 您如何将其转换为帕斯卡表达式?为什么你认为答案仍然不正确?
    • GetWindowLong(hwnd, GWL_STYLE) and WS_MINIMIZE = WS_MINIMIZE我已经解释了我对另一个问题的看法。
    • 这不是帕斯卡。在 Pascal 中,按位与运算符不是&,而是and。此外,整数不会自动转换为布尔值。 Sertac 给出了正确的 Pascal 版本(虽然我个人更喜欢 <> 0)。
    猜你喜欢
    • 1970-01-01
    • 2013-10-09
    • 2014-06-19
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多