-1

(自分用に)作業中のアプリケーションがあり、ウィンドウがまったく表示されないようにしたいと考えています。


これまでのところ、WindowState.Minimizedフォームの初期状態が最小化されるようになっています。また、タスクバーでアプリのアイコンをクリックすると、表示されているときだけでなく、最小化されたままになりたい. Hide()だから私はこのようなものがうまくいくかもしれないと思った:

protected override void OnGotFocus(EventArgs e)
{
    this.WindowState = WindowState.Minimized;
}

しかし、私は間違っていました。だから私が考えているのは、以前に OnGotFocus起こったことが必要だということです。this.WindowState = WindowState.Minimizeフォーカスされたときに非表示にするだけでは不十分な理由は、呼び出される前にタスクバーのアイコンをクリックすると、実際に表示されることが非常にかすかにわかるためです。

私の唯一の要件は、タスクバーでアイコンをクリックしたときにアプリケーションが表示されないようにすることです。ただし、ある時点でプログラムでウィンドウを表示する必要があります。

そのアイコンをクリックしてもウィンドウが表示されないようにするにはどうすればよいですか?

4

2 に答える 2

3

これは、行き来する「ヒント」がなくてもうまくいくように見えました:

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x0112)  //WM_SYSCOMMAND
        {
            if ((m.WParam.ToInt32() & 0xFFF0) == 0xF030 ||
                (m.WParam.ToInt32() & 0xFFF0) == 0xF120)
                m.WParam = new IntPtr(0xF020);
        }
        base.WndProc(ref m);
    }

をオーバーライドするだけで、とのWndProc両方がキャッチされます。 .SC_MAXIMIZE (0xF030)SC_RESTORE (0x0F120)SC_MINIMIZE is 0xF020

Hans が提案したように、このMSDNセクションに従って、システムで使用される下位ビットをマスクするように投稿を編集しました 。 =vs.85).aspx

于 2013-06-17T11:14:55.957 に答える