当前位置:  开发笔记 > 编程语言 > 正文

单实例窗口形成应用程序以及如何获取它的参考?

如何解决《单实例窗口形成应用程序以及如何获取它的参考?》经验,为你挑选了2个好方法。

我有一个Windows窗体应用程序,当时只允许一个实例运行.我已经使用Mutex实现了Singleton.应用程序必须可以从命令行启动(带或不带参数).应用程序由脚本启动和退出.用户不能对其采取任何行动.

因此,应用程序的目的是简单的"指标"应用程序,它将为最终用户显示一些视觉和图形信息.最终用户无法对其进行任何操作,只需查看即可.它是Windows窗体应用程序,因为视觉和图形外观是相对容易的实现(你可以得到它最顶层,无边框等).

简单地说:当有人试图用退出命令行参数运行相同的应用程序时,如何退出当前运行的应用程序?

bool quit = (args.Length > 0 && args[0] == "quit") ? true : false;
using (Mutex mutex = new Mutex(false, sExeName))
{
    if (!mutex.WaitOne(0, true)) 
    {
        if (quit)
        {
            // This is the tricky part?
            // How can I get reference to "previous" launced 
            // Windows Forms application and call it's Exit() method.
        }
    } 
    else 
    {
        if (!quit)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

Hans Passant.. 6

.NET框架为此提供了非常好的通用解决方案.查看本MSDN杂志文章的底部.使用StartupNextInstanceHandler()事件处理程序将任意命令传递给正在运行的实例,如"quit".



1> Hans Passant..:

.NET框架为此提供了非常好的通用解决方案.查看本MSDN杂志文章的底部.使用StartupNextInstanceHandler()事件处理程序将任意命令传递给正在运行的实例,如"quit".


Microsoft已销毁了另一个链接。他们会学吗?

2> Matt..:

这不是复杂的事情吗?您是否可以重新激活现有实例,而不是关闭现有实例并启动新实例?无论哪种方式围绕下面的代码应该给你一些关于如何去做的想法...?

Process thisProcess = Process.GetCurrentProcess();
        Process[] allProcesses = Process.GetProcessesByName(thisProcess.ProcessName);
        Process otherProcess = null;
        foreach (Process p in allProcesses )
        {
            if ((p.Id != thisProcess.Id) && (p.MainModule.FileName == thisProcess.MainModule.FileName))
            {
                otherProcess = p;
                break;
            }
        }

       if (otherProcess != null)
       {
           //note IntPtr expected by API calls.
           IntPtr hWnd = otherProcess.MainWindowHandle;
           //restore if minimized
           ShowWindow(hWnd ,1);
           //bring to the front
           SetForegroundWindow (hWnd);
       }
        else
        {
            //run your app here
        }

有关于这一个问题在这里

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有