您的位置:首页 > 编程语言 > C#

c# 控制winform程序只能打开一个

2013-07-09 19:20 351 查看
这是完整的代码,你加在你的程序里面就可以了

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using System.Threading;

using System.Runtime.InteropServices;

namespace Example104_使程序只能够运行一个

{

/// <summary>

/// Form1 的摘要说明。

/// </summary>

public class Form1 : System.Windows.Forms.Form

{

/// <summary>

/// 必需的设计器变量。

/// </summary>

private System.ComponentModel.Container components = null;

public Form1()

{

//

// Windows 窗体设计器支持所必需的

//

InitializeComponent();

//

// TODO: 在 InitializeComponent 调用后添加任何构造函数代码

//

}

/// <summary>

/// 清理所有正在使用的资源。

/// </summary>

protected override void Dispose( bool disposing )

{

if( disposing )

{

if (components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}

#region Windows Form Designer generated code

/// <summary>

/// 设计器支持所需的方法 - 不要使用代码编辑器修改

/// 此方法的内容。

/// </summary>

private void InitializeComponent()

{

//

// Form1

//

this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);

this.ClientSize = new System.Drawing.Size(272, 189);

this.Name = "Form1";

this.Text = "Form1";

}

#endregion

/// <summary>

/// 应用程序的主入口点。

/// </summary>

[StructLayout( LayoutKind.Sequential)]

public class SECURITY_ATTRIBUTES

{

public int nLength;

public int lpSecurityDescriptor;

public int bInheritHandle;

}

[System.Runtime.InteropServices.DllImport("kernel32")]

private static extern int GetLastError();

[System.Runtime.InteropServices.DllImport("kernel32")]

private static extern IntPtr CreateMutex(SECURITY_ATTRIBUTES lpMutexAttributes,bool bInitialOwner,string lpName);

[System.Runtime.InteropServices.DllImport("kernel32")]

private static extern int ReleaseMutex(IntPtr hMutex);

const int ERROR_ALREADY_EXISTS = 0183;

[STAThread]

static void Main()

{

IntPtr hMutex;

hMutex=CreateMutex(null,false,"test");

if (GetLastError()!=ERROR_ALREADY_EXISTS)

{

Application.Run(new Form1());

}

else

{

MessageBox.Show("本程序只允许同时运行一个");

ReleaseMutex(hMutex);

}

}

}

}

我还来给出一种方法:
[STAThread()]public static void Main (){
bool ret;
System.Threading.Mutex m = new System.Threading.Mutex(true, Application.ProductName,out ret);
if (ret) {
//System.Windows.Forms.Application.EnableVisualStyles(); //这两行实现 XP 可视风格
//System.Windows.Forms.Application.DoEvents();
System.Windows.Forms.Application.Run(new frmMain());
// frmMain 为你程序的主窗体,如果是控制台程序不用这句
m.ReleaseMutex();
}
else {
MessageBox.Show(null, "有一个和本程序相同的应用程序已经在运行,请不要同时运行多个本程序。\n\n这个程序即将退出。",Application.ProductName,MessageBoxButtons.OK,MessageBoxIcon.Warning);
// 提示信息,可以删除。
Application.Exit();//退出程序
}
}


刚写了最简单的,把这段替换MAIN方法就好了
static void Main()
{
if(System.Diagnostics.Process.GetProcessesByName(System.Diagnostics.Process.GetCurrentProcess().ProcessName).Length>1)
{
}
else
{
Application.Run(new MainForm());
}
}
最傻瓜式的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐