单击桌面快捷方式时从系统托盘恢复应用程序
本文关键字:恢复 应用程序 系统 桌面 快捷方式 单击 | 更新日期: 2023-09-27 18:33:48
>我创建了一个应用程序,该应用程序在启动时在系统托盘中启动。我使用以下帖子来实现这一点:如何启动最小化到托盘的WinForm应用程序?
此应用程序还只允许单个实例运行:http://www.codeproject.com/Articles/32908/C-Single-Instance-App-With-the-Ability-To-Restore
我遇到的问题是,当我第一次启动应用程序时,它会最小化到系统托盘,但是如果我单击桌面图标,它不会出现。我必须单击托盘中的图标才能恢复应用程序。如果我再次最小化它,然后单击桌面图标,它就会出现。
这是我第二次尝试使用wform应用程序,它与SetVisibleCore有关吗?
任何指向正确方向的指针都会很棒。
如果使 WinForms 应用程序成为单一实例,则很容易使最小化的窗口还原,
http://www.hanselman.com/blog/TheWeeklySourceCode31SingleInstanceWinFormsAndMicrosoftVisualBasicdll.aspx
它只是从Microsoft.VisualBasic.ApplicationServices命名空间使用WindowsFormsApplicationBase的另一种变体。比使用互斥体更容易/更好。
您可能会更改
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;
}
如果你在主中编写恢复逻辑怎么办。您可以使用 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);
}