0

起動時に画面から非表示にする必要がある C# で記述された GUI アプリがあります (代わりに、トレイ アイコンが表示されます)。C++/MFC では、次のように非表示にします。

void OnWindowPosChanging(WINDOWPOS* lpwndpos)
{
    CDialog::OnWindowPosChanging(lpwndpos);

    //Prevent dialog from showing
    lpwndpos->flags &= ~SWP_SHOWWINDOW;
}

しかし、C# でもっと簡単な方法はありますか?

4

4 に答える 4

4

フォームのVisibleおよびShowInTaskbarプロパティをfalseに設定し、 NotifyIconクラスを使用してトレイ領域にアイコンを表示する必要があります。

これがアプリケーションで開く最初のフォームである場合は、ファイル内の を編集する必要がありApplication.Run()ますProgram.cs

交換するだけ

Application.Run(new MyForm());

MyForm myForm = new MyForm();
Application.Run();

次に、フォームのコンストラクターで NotifyIcon オブジェクトを初期化します。

NotifyIcon nIcon = new NotifyIcon();
nIcon.Icon = new Icon(@"...");
nIcon.Visible = true;
于 2013-05-29T22:41:36.857 に答える
1

スタートアップ フォームのShowInTaskBarおよび Visible プロパティを使用できます。

于 2013-05-29T22:35:28.620 に答える
1

フォームで SetVisibleCore() メソッドをオーバーライドすることにより、Winforms でこれを行います。追加の作業が必要です。ネイティブ ウィンドウは従来の .NET 遅延方式で作成されます。トリガーは、最初の Show() 呼び出しです。したがって、これが確実に処理されるようにする必要があります。このコードをフォームに貼り付けます。

protected override void SetVisibleCore(bool value) {
    if (!this.IsHandleCreated) {
        value = false;
        this.CreateHandle();
    }
    base.SetVisibleCore(value);
}

Show() を呼び出すか、Visible プロパティを true に設定することで、いつでも表示できるようになりました。Load イベントはそれまで発生しないことに注意してください。そのため、すべての初期化コードを、それが属するコンストラクターに移動してください。

于 2013-05-30T00:38:39.000 に答える
0

これを使用して、(最終的に) コンソール ウィンドウを非表示にしました。

private static class NativeMethods
{
    [DllImport("user32.dll", CharSet = CharSet.Unicode)]
    private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

    public static void SetConsoleWindowVisibility(Boolean argShow)
    {
        IntPtr hWnd = NativeMethods.FindWindow(null, Console.Title);

        if (hWnd != IntPtr.Zero)
        {
            if (!argShow)
                //Hide the window                    
                ShowWindow(hWnd, 0); // 0 = SW_HIDE                
            else
                //Show window again                    
                ShowWindow(hWnd, 1); //1 = SW_SHOWNORMAL           
        }
    }
}

すべてが少し複雑に見えますが、基本的にはウィンドウへのハンドルを取得し、それを使用して ShowWindow を呼び出します。コンソール アプリなので、コマンド ライン引数を渡して、ウィンドウを非表示にしないようにします。デバッグなどに使用します。

これを program.cs に入れ、コマンド ライン引数をデコードしてから、NativeMethods.SetConsoleWindowVisiblity を呼び出します。

可視性と showintaskbar を設定するだけでは機能しない理由がわかりませんでした。しかし、彼らは間違いなくそうしませんでした

于 2013-05-29T23:02:26.080 に答える