在 winapi 中获取 window 的最后一个 ShowWindow 状态

Get the last ShowWindow state for a window in winapi

当您在任务栏(Windows 用户)中单击 window 时,它将保留其最后的状态 - 最大化或正常可缩放 window。我正在尝试做类似的事情,但是以编程方式进行并且没有 window 获得焦点(例如,成为前景并在另一个 window 中干扰我当前的 activity)。

我能做到吗?可以使用此 API 调用获得当前 window 状态:

   //Empty Window placement structure
   WinDefExt.WINDOWPLACEMENT placement = new WinDefExt.WINDOWPLACEMENT();
   //winapi call to external User32.dll file
   UserExt.GetWindowPlacement(hwnd, placement);
   //showCmd should be equal to one of the SW_ constants (here: https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548%28v=vs.85%29.aspx)
   placement.showCmd;

ShowWindow 不是 "state",而是 "action"。没有 GetShowState 命令。您可以从 window 的当前状态推断出一个值,但是无法找出与 ShowWindow.

一起使用的实际最后一个值
if (!IsWindowVisible(hWnd))
    swState = SW_HIDE;
else
if (IsIconic(hWnd))
    swState = SW_MINIMIZE;
else
if (IsZoomed(hWnd))
    swState = SW_MAXIMIZE;
else
{
    // not hidden, minimized or zoomed, so we are a normal visible window
    // last ShowWindow flag could have been SW_RESTORE, SW_SHOW, SW_SHOWNA, etc
    // no way to tell
    swState = SW_SHOW;
}