Как принять форму, которая в настоящее время минимизирована, и восстановить ее в прежнее состояние. Я не могу найти способ определить, был ли его предыдущий WindowState
равен Normal
или Maximized
; но я знаю, что информация должна храниться где-то, потому что в окнах нет проблем с приложениями на панели задач.C# Programmatically Unminimize form
ответ
Для этого не существует управляемого API. Способ сделать это - PInvoke GetWindowPlacement и проверить на WPF_RESTORETOMAXIMIZED
.
Подробнее см. Здесь Microsoft How To (который демонстрирует технику в VB).
В C#, это было бы:
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
private struct WINDOWPLACEMENT
{
public int length;
public int flags;
public int showCmd;
public System.Drawing.Point ptMinPosition;
public System.Drawing.Point ptMaxPosition;
public System.Drawing.Rectangle rcNormalPosition;
}
public void RestoreFromMinimzied(Form form)
{
const int WPF_RESTORETOMAXIMIZED = 0x2;
WINDOWPLACEMENT placement = new WINDOWPLACEMENT();
placement.length = Marshal.SizeOf(placement);
GetWindowPlacement(form.Handle, ref placement);
if ((placement.flags & WPF_RESTORETOMAXIMIZED) == WPF_RESTORETOMAXIMIZED)
form.WindowState = FormWindowState.Maximized;
else
form.WindowState = FormWindowState.Normal;
}
this.WindowState = FormWindowState.Normal;
Вы также:
this.WindowState = FormWindowState.Minimized;
this.WindowState = FormWindowState.Maximized;
Ах, я неправильно понял вопрос:
Restore WindowState from Minimized должно быть то, что вы ищете. Он говорит, что вы можете имитировать поведение панели задач, как это:
SendMessage(form.Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
Это не ответ на свой вопрос - он спрашивает, стоит ли идти к нормальному или Развернутому если форма в настоящее время сведена к минимуму ... –
Я обновил свой ответ. Я не понял этот вопрос. –
Это гораздо более чистое решение - очень просто реализовать. –
Если вы хотите сохранить предыдущее состояние, когда есть изменения (развернуть/свернуть), вам придется внедриться в SizeChanged
случае, согласно this post on MSDN , Вы можете получить WindowState
и сохранить его.
Есть лучший вариант, чем хранить это самостоятельно. Это уже отслеживается Windows API. –
Вы можете отслеживать изменения состояния окна через событие Resize. Как это:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
prevState = currState = this.WindowState;
}
protected override void OnResize(EventArgs e) {
if (currState != this.WindowState) {
prevState = currState;
currState = this.WindowState;
}
base.OnResize(e);
}
private FormWindowState prevState, currState;
}
- 1. Получить C: \ Users Programmatically
- 2. Можно перехватить событие «unminimize» на окнах?
- 3. Используя услугу unminimize приложения вместо нового намерения
- 4. Изменить Skybox Material Programmatically (C#)
- 5. C# WPF Switch Resource Programmatically
- 6. Как искать через C# DropDownList Programmatically
- 7. C# + Programmatically Работа с обработчиками событий
- 8. Com port Disable/Enable Programmatically C#
- 9. C# Programmatically Disable Large Send Offload (LSO)
- 10. Создание пользовательского UITableViewCell Programmatically - Objective C
- 11. C# Webbrowser Programmatically Close JS Confirm Box
- 12. C# - кнопка Click Event Programmatically Iteration
- 13. C# Webbrowser Programmatically Clicking Youtube Video
- 14. Segue Programmatically
- 15. ScrollView Programmatically
- 16. SwipeRefresh Programmatically
- 17. Dojo Programmatically validate TextBox
- 18. Принимать UAC Prompt Programmatically
- 19. Programmatically Ignore printf
- 20. Запуск EA Programmatically
- 21. Display Progress Bar - Programmatically
- 22. Sync Windows Briefcase Programmatically
- 23. C# Windows Application Form to Html Form
- 24. C# Smooth Switching from Form to Form
- 25. Приложение C# для Windows Form Form пустое?
- 26. Доступ к Excel Programmatically
- 27. import C# form in C++
- 28. C# form в C++-программе
- 29. Перечисление истории Microsoft Edge Programmatically
- 30. C# True hide form
@ Dan: Спасибо - я исправил ошибки - (я набирал текст на лету и копировал с pinvoke.net, у которого была ошибка ref/out) –
@ Dan: Звучит так, что это сработало для вас , как минимум ;) –