代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
CSharp
】
WinForm 只运行一个程序实例
作者:
Dezai.CN
/ 发布于
2011/9/14
/
798
<div><span style="color: #0000ff">using</span><span style="color: #000000"> System; </span><span style="color: #0000ff">using</span><span style="color: #000000"> System.Collections.Generic; </span><span style="color: #0000ff">using</span><span style="color: #000000"> System.Windows.Forms; </span><span style="color: #0000ff">using</span><span style="color: #000000"> System.Runtime.InteropServices; </span><span style="color: #0000ff">using</span><span style="color: #000000"> System.Diagnostics; </span><span style="color: #0000ff">using</span><span style="color: #000000"> System.Reflection; </span><span style="color: #0000ff">namespace</span><span style="color: #000000"> WinFormStudy { </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> Program { </span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080"><summary></span><span style="color: #008000"> </span><span style="color: #808080">///</span><span style="color: #008000"> 应用程序的主入口点。 </span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080"></summary></span><span style="color: #808080"> </span><span style="color: #000000">[STAThread] </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> Main() { Process instance </span><span style="color: #000000">=</span><span style="color: #000000"> RunningInstance(); </span><span style="color: #0000ff">if</span><span style="color: #000000"> (instance </span><span style="color: #000000">==</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">) { </span><span style="color: #008000">//</span><span style="color: #008000">没有实例在运行</span><span style="color: #008000"> </span><span style="color: #000000">Application.Run(</span><span style="color: #0000ff">new</span><span style="color: #000000"> Form1()); } </span><span style="color: #0000ff">else</span><span style="color: #000000"> { </span><span style="color: #008000">//</span><span style="color: #008000">已经有一个实例在运行</span><span style="color: #008000"> </span><span style="color: #000000">HandleRunningInstance(instance); } } </span><span style="color: #0000ff">#region</span><span style="color: #000000"> 确保程序只运行一个实例</span><span style="color: #000000"> </span><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> Process RunningInstance() { Process current </span><span style="color: #000000">=</span><span style="color: #000000"> Process.GetCurrentProcess(); Process[] processes </span><span style="color: #000000">=</span><span style="color: #000000"> Process.GetProcessesByName(current.ProcessName); </span><span style="color: #008000">//</span><span style="color: #008000">遍历与当前进程名称相同的进程列表 </span><span style="color: #008000"> </span><span style="color: #0000ff">foreach</span><span style="color: #000000"> (Process process </span><span style="color: #0000ff">in</span><span style="color: #000000"> processes) { </span><span style="color: #008000">//</span><span style="color: #008000">如果实例已经存在则忽略当前进程 </span><span style="color: #008000"> </span><span style="color: #0000ff">if</span><span style="color: #000000"> (process.Id </span><span style="color: #000000">!=</span><span style="color: #000000"> current.Id) { </span><span style="color: #008000">//</span><span style="color: #008000">保证要打开的进程同已经存在的进程来自同一文件路径</span><span style="color: #008000"> </span><span style="color: #0000ff">if</span><span style="color: #000000"> (Assembly.GetExecutingAssembly().Location.Replace(</span><span style="color: #800000">"</span><span style="color: #800000">/</span><span style="color: #800000">"</span><span style="color: #000000">, </span><span style="color: #800000">"</span><span style="color: #800000">\\</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #000000">==</span><span style="color: #000000"> current.MainModule.FileName) { </span><span style="color: #008000">//</span><span style="color: #008000">返回已经存在的进程</span><span style="color: #008000"> </span><span style="color: #0000ff">return</span><span style="color: #000000"> process; } } } </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">; } </span><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> HandleRunningInstance(Process instance) { MessageBox.Show(</span><span style="color: #800000">"</span><span style="color: #800000">已经在运行!</span><span style="color: #800000">"</span><span style="color: #000000">, </span><span style="color: #800000">"</span><span style="color: #800000">提示信息</span><span style="color: #800000">"</span><span style="color: #000000">, MessageBoxButtons.OK, MessageBoxIcon.Information); ShowWindowAsync(instance.MainWindowHandle, </span><span style="color: #800080">1</span><span style="color: #000000">); </span><span style="color: #008000">//</span><span style="color: #008000">调用api函数,正常显示窗口</span><span style="color: #008000"> </span><span style="color: #000000">SetForegroundWindow(instance.MainWindowHandle); </span><span style="color: #008000">//</span><span style="color: #008000">将窗口放置最前端</span><span style="color: #008000"> </span><span style="color: #000000">} [DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">User32.dll</span><span style="color: #800000">"</span><span style="color: #000000">)] </span><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">extern</span><span style="color: #000000"> </span><span style="color: #0000ff">bool</span><span style="color: #000000"> ShowWindowAsync(System.IntPtr hWnd, </span><span style="color: #0000ff">int</span><span style="color: #000000"> cmdShow); [DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">User32.dll</span><span style="color: #800000">"</span><span style="color: #000000">)] </span><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">extern</span><span style="color: #000000"> </span><span style="color: #0000ff">bool</span><span style="color: #000000"> SetForegroundWindow(System.IntPtr hWnd); </span><span style="color: #0000ff">#endregion</span><span style="color: #000000"> } }</span></div> <div><span style="color: #000000">或者</span></div> <div><span style="color: #000000"><span style="color: #0000ff">using</span><span style="color: #000000"> System; </span><span style="color: #0000ff">using</span><span style="color: #000000"> System.Collections.Generic; </span><span style="color: #0000ff">using</span><span style="color: #000000"> System.Windows.Forms; </span><span style="color: #0000ff">namespace</span><span style="color: #000000"> WinFormStudy { </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> Program { </span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080"><summary></span><span style="color: #008000"> </span><span style="color: #808080">///</span><span style="color: #008000"> 应用程序的主入口点。 </span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080"></summary></span><span style="color: #808080"> </span><span style="color: #000000">[STAThread] </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> Main() { </span><span style="color: #0000ff">bool</span><span style="color: #000000"> ret; System.Threading.Mutex m </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> System.Threading.Mutex(</span><span style="color: #0000ff">true</span><span style="color: #000000">, Application.ProductName, </span><span style="color: #0000ff">out</span><span style="color: #000000"> ret); </span><span style="color: #0000ff">if</span><span style="color: #000000"> (ret) { System.Windows.Forms.Application.EnableVisualStyles(); </span><span style="color: #008000">//</span><span style="color: #008000">这两行实现 XP 可视风格 </span><span style="color: #008000"> </span><span style="color: #000000">System.Windows.Forms.Application.DoEvents(); System.Windows.Forms.Application.Run(</span><span style="color: #0000ff">new</span><span style="color: #000000"> Form1()); </span><span style="color: #008000">//</span><span style="color: #008000"> frmMain 为你程序的主窗体,如果是控制台程序不用这句 </span><span style="color: #008000"> </span><span style="color: #000000">m.ReleaseMutex(); } </span><span style="color: #0000ff">else</span><span style="color: #000000"> { MessageBox.Show(</span><span style="color: #0000ff">null</span><span style="color: #000000">, </span><span style="color: #800000">"</span><span style="color: #800000">有一个和本程序相同的应用程序已经在运行,请不要同时运行多个本程序。\n\n这个程序即将退出。</span><span style="color: #800000">"</span><span style="color: #000000">, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning); </span><span style="color: #008000">//</span><span style="color: #008000"> 提示信息,可以删除。 </span><span style="color: #008000"> </span><span style="color: #000000">Application.Exit();</span><span style="color: #008000">//</span><span style="color: #008000">退出程序 </span><span style="color: #008000"> </span><span style="color: #000000">} } } }</span></span></div>
试试其它关键字
只运行一个程序
同语言下
.
文件IO 操作类库
.
Check图片类型[JPEG(.jpg 、.jpeg),TIF,GIF,BMP,PNG,P
.
机器名和IP取得(IPV4 IPV6)
.
Tiff转换Bitmap
.
linqHelper
.
MadieHelper.cs
.
RegHelper.cs
.
如果关闭一个窗体后激活另一个窗体的事件或方法
.
创建日志通用类
.
串口辅助开发类
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
Dezai.CN
贡献的其它代码
(
4037
)
.
多线程Socket服务器模块
.
生成随机密码
.
清除浮动样式
.
弹出窗口居中
.
抓取url的函数
.
使用base HTTP验证
.
div模拟iframe嵌入效果
.
通过header转向的方法
.
Session操作类
.
执行sqlite输入插入操作后获得自动编号的ID
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3