我需要检测特定窗口是否已最小化。为此,我发现了两个功能:
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);
两种选择中哪一种更可取?还是它们在所有情况下都一样好?
IsIconic()
是检查窗口是否最小化的正确且有据可查的方法:
IsIconic函数
确定指定的窗口是否最小化(图标)。
窗户功能
的
IsZoomed
和IsIconic
功能确定给定的窗口是否被最大化或最小化,分别。该GetWindowPlacement
函数检索窗口的最小化,最大化和还原位置,并确定窗口的显示状态。
使用其他任何东西最多都是hack。这样的事实IsIconic()
,并GetWindowPlacement()
在内部检查HWND的WS_MINIMIZE
窗口样式只是一个实现细节。使用这些功能而不是手动检查窗口样式的开销可以忽略不计。
坚持使用IsIconic()
,这是Microsoft为此专门提供的API。