Получить последнее состояние ShowWindow для окна в winapi

Когда вы щелкаете окно на панели задач (пользователи Windows), оно сохраняет свое последнее состояние - развернутое или обычное масштабируемое окно. Я пытаюсь сделать то же самое, но программно и без того, чтобы окно фокусировалось (например, становясь на передний план и мешая моей текущей деятельности в другом окне).

Могу ли я сделать это? Текущее состояние окна можно получить с помощью этого вызова API:

   //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;

1 ответ

Решение

ShowWindow это не "государство", это "действие". Нет никаких GetShowState команда. Вы можете вывести значение из текущего состояния окна, но нет способа узнать фактическое последнее значение, использованное с 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;
}
Другие вопросы по тегам