在 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;
}
当您在任务栏(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;
}