WinFrom 只启动一个exe,并且获得焦点

只启动一个exe方法:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Runtime.InteropServices;
 4 using System.Windows.Forms;
 5
 6 namespace StringToImage
 7 {
 8     static class Program
 9     {
10         [DllImport("user32.dll")]
11         public static extern IntPtr FindWindow(String classname, String title);
12         [DllImport("user32.dll")]
13         public static extern void SetForegroundWindow(IntPtr hwnd);
14
15         [STAThread]
16         static void Main()
17         {
18             Application.EnableVisualStyles();
19             Application.SetCompatibleTextRenderingDefault(false);
20
21             string p = System.Diagnostics.Process.GetCurrentProcess().ProcessName;
22             System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName(p);
23             if (processes.Length < 2)
24                 Application.Run(new Form1());
25             else
26             {
27                 //MessageBox.Show("程序已经运行!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
28                 IntPtr ptr = FindWindow(null, "文字转换成图片");//"文字转换成图片"为对应窗体的Text值
29                 if (ptr.ToString() != "0")//不等于0表示找到了窗体
30                     SetForegroundWindow(ptr);
31
32                 Application.Exit();
33             }
34         }
35     }
36 }

时间: 2024-09-30 21:27:42

WinFrom 只启动一个exe,并且获得焦点的相关文章

程序只启动一个实例的几种方法

我们在使用<金山词霸>时发现,在<金山词霸>已经运行了的情况下,再次点击<金山词霸>的图标,那么它不会再运行另外一个<金山词霸>,而是将已有的<金山词霸>给激活,始终只能运行一个<金山词霸>的实例. 在我们的程序当中如果要实现类似<金山词霸>的功能,就要解决两个问题,首先是要判断该程序已有一个实例在运行,其次是要将已运行的应用程序实例激活,同时退出第二个应用程序实例.  对于第一个问题,我们可以通过设置命名互斥对象或命名信

WinForm程序,实现只启动一个实例

前言:在我们做的软件中,当点击图标运行时,正常的需求是只需要启动一个软件的实例,这是非常重要的一点,不然就显得我们的软件非常的山寨,笔者在工作中经常遇到同事没有注意这一点,看是不重要,实则非常的重要,这里在C#中进行实现. 注:代码需写在Program.cs中,具体代码如下: 1 static class Program 2 { 3 4 /// <summary> 5 /// 该函数设置由不同线程产生的窗口的显示状态. 6 /// </summary> 7 /// <para

electron限制只启动一个应用

// ========================================================== // 限制只可以打开一个应用,2.x的文档 // const isSecondInstance = app.makeSingleInstance((commandLine, workingDirectory) => { // // Someone tried to run a second instance, we should focus our window. // i

让程序只启动一个实例

在应用程序的InitInstance方法中,添加如下几行代码: CreateMutex(NULL,true,m_pszAppName); if(GetLastError() == ERROR_ALREADY_EXISTS) { AfxMessageBox(_T("程序已启动"),MB_OK | MB_APPLMODAL | MB_ICONSTOP); return false; }

C#程序(含多个Dll)合并成一个Exe

把C#程序(含多个Dll)合并成一个Exe的超简单方法 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. 但是,很多时候我们本想开发一款只需要一个exe就能完美运行的小工具.那该怎么办呢? 下文介绍一种超简单的方法,不用写一行代码就可轻松实现. 这里我们需要用到一款名为Fody.Costura的工具.Fody.Costura是一个Fody框架下的插件,可通过Nuget安装到VS工程中.安装之后,就可以将项目所依赖的DLL(甚至PDB)文件全部打

把C#程序(含多个Dll)合并成一个Exe的超简单方法

原文:把C#程序(含多个Dll)合并成一个Exe的超简单方法 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. 但是,很多时候我们本想开发一款只需要一个exe就能完美运行的小工具.那该怎么办呢? 下文介绍一种超简单的方法,不用写一行代码就可轻松实现. 这里我们需要用到一款名为Costura.Fody的工具.Costura.Fody是一个Fody框架下的插件,可通过Nuget安装到VS工程中.安装之后,就可以将项目所依赖的DLL(甚至PDB)文件

37.QT-QTSingleApplication-程序只运行一个实例

QTSingleApplication由Qt官方提供的,用于实现只启动一个实例,并在启动时可以向向另一个实例通信(依赖于QtNetwork模块) QTSingleApplication下载路径:链接:https://pan.baidu.com/s/1bBLgkpOW3lq6ZQj9ultxyA 提取码:2n9h 1. 添加源码到工程 将QTSingleApplication解压,将解压后目录拷贝到当前项目路径下,在项目pro文件中增加下面这行 2. 修改main.cpp,将以前QApplicat

用C#给程序加启动画面并只允许一个应用程序实例运行

1. 启动画面类: public class SplashForm : System.Windows.Forms.Form { private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label lbl_version; /// <summary> /// 必需的设计器变量. /// </summ

java之如何实现调用启动一个可执行文件,exe

1 /* 2 * 运行可执行文件:.exe 3 * 当要执行一个本地机器上的可执行文件时, 4 * 可以使用java.lang包中的Runtime类,首先使用Runtime类,首先 5 * 使用Runtime类声明一个对象 6 *{ 7 * Runtime sc =Runtime.getRuntime(); 8 * sc可以调用exec(String command) 方法打开本地湖区上的可执行文件或执行一个操作. 9 * } 10 */ 11 12 13 /* 14 * 不妨举列: 15 *