3

起動時にシステムトレイから起動するアプリケーションを作成しました。私はこれを達成するために以下の投稿を使用しました: トレイに最小化されたWinFormアプリを起動する方法は?

このアプリケーションでは、単一のインスタンスのみを実行することもできます:http: //www.codeproject.com/Articles/32908/C-Single-Instance-App-With-the-Ability-To-Restore

私が得ている問題は、アプリケーションを最初に起動したときにシステムトレイに最小化されることですが、デスクトップアイコンをクリックしても表示されません。アプリケーションを復元するには、トレイのアイコンをクリックする必要があります。次に最小化してから、デスクトップアイコンをクリックすると表示されます。

これは、winformアプリケーションでの2回目の試みですが、SetVisibleCoreと関係がありますか?

正しい方向へのポインタは素晴らしいでしょう。

4

2 に答える 2

1

WinForms アプリケーションをシングルトンにすると、最小化されたウィンドウを簡単に復元できます。

http://www.hanselman.com/blog/TheWeeklySourceCode31SingleInstanceWinFormsAndMicrosoftVisualBasicdll.aspx

これは、Microsoft.VisualBasic.ApplicationServices 名前空間から WindowsFormsApplicationBase を使用する別の変形です。Mutex を使用するよりも簡単/優れています。

あなたは変わるかもしれません

    void this_StartupNextInstance(object sender, StartupNextInstanceEventArgs e)
    {
        Form1 form = MainForm as Form1; //My derived form type
        form.LoadFile(e.CommandLine[1]);
    }

    void this_StartupNextInstance(object sender, StartupNextInstanceEventArgs e)
    {
        Form1 form = MainForm as Form1; //My derived form type
        form.Show();
        form.WindowState = FormWindowState.Normal;
    }
于 2012-05-10T07:57:37.993 に答える
0

メインに復元ロジックを書くとどうなるでしょうか。これを行うには、ShowWindow関数とSW_MAXIMIZEフラグを使用します。

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

    private const int SW_MAXIMIZE = 9; //Command to restore the window

    [STAThread]
    static void Main()
    {
        bool onlyInstance = false;
        Mutex mutex = new Mutex(true, "UniqueApplicationName", out onlyInstance);
        if (!onlyInstance) 
        {
             Process[] p = Process.GetProcessesByName("UniqueApplicationName");
             SetForegroundWindow(p[0].MainWindowHandle);
             ShowWindow(p[0].MainWindowHandle, SW_MAXIMIZE);
             return;
        }
        Application.Run(new MainForm);
        GC.KeepAlive(mutex);
}
于 2012-05-10T08:10:06.490 に答える