Windowsフォームが最小化されていることを検出する方法は?


84

WindowStateで現在の状態を取得できることは知っていますが、ユーザーがフォームを最小化しようとしたときに発生するイベントがあるかどうかを知りたいです。

回答:


122

Resizeイベントを使用して、イベントのForms.WindowStateプロパティを確認できます。

private void Form1_Resize ( object sender , EventArgs e )
{
    if ( WindowState == FormWindowState.Minimized )
    {
        // Do some stuff
    }
}

2
これは、例外を飲み込むことができる場所の1つであるように思われることに注意してください。
Jonathon Reinhart 2013年

1
this.Resize + = new System.EventHandler(this.Form1_Resize);も必要です。
トム

79

フォームが最小化される前に入るには、WndProcプロシージャにフックする必要があります。

    private const int WM_SYSCOMMAND = 0x0112;
    private const int SC_MINIMIZE = 0xF020; 

    [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
    protected override void WndProc(ref Message m)
    {
        switch(m.Msg)
        {
            case WM_SYSCOMMAND:
                int command = m.WParam.ToInt32() & 0xfff0;
                if (command == SC_MINIMIZE)
                {
                    // Do your action
                }
                // If you don't want to do the default action then break
                break;
        }
        base.WndProc(ref m);
    }

フォームが最小化されたに反応するResize、他の回答が指摘しているようにイベントにフックします(完全を期すためにここに含まれています)。

private void Form1_Resize (object sender, EventArgs e)
{
    if (WindowState == FormWindowState.Minimized)
    {
        // Do your action
    }
}

0xF030は、通常のウィンドウ状態から最大化する場合です。0xF120は、Windowsバーから最大化する場合です
k4yaman 2017年

実際、これはMinimizeClickイベントのみをキャッチます。あなたが探しているのはWM_SIZE(0x0005)&SIZE_MINIMIZED(1)
Ori Nachum

17

特定のイベントはわかりませんがResize、フォームが最小化されるとイベントが発生します。FormWindowState.Minimizedそのイベントで確認できます


2
これをプライベートな「lastState」フラグと組み合わせるのが最も簡単な方法です。
Matthew Scharley 2009年

7

イベントを最小化するWPFウィンドウを検索する人の場合:

少し違います。コールバックにはWindowStateを使用します。

private void Form1_Resize(object sender, EventArgs e)
{
    if (WindowState == FormWindowState.Minimized)
    {
        // Do some stuff
    }
}

使用するイベントはStateChanged(代わりにResize)です:

public Main()
{
    InitializeComponent();
    this.StateChanged += Form1_Resize;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.