1 using System; 2 using System.Collections.Generic; 3 using System.Runtime.InteropServices; 4 using System.Windows.Forms; 5 6 namespace Test 7 { 8 static class Program 9 { 10 /// <summary> 11 /// 应用程序的主入口点。 12 /// </summary> 13 [STAThread] 14 static void Main() 15 { 16 17 //防止程序多次运行 18 if (!OneInStance.IsFirst("GetPayInfo")) 19 { 20 MessageBox.Show("警告:程序正在运行中! 请不要重复打开程序!", "程序错误提示:", MessageBoxButtons.OK, MessageBoxIcon.Stop); 21 return; 22 } 23 24 Application.EnableVisualStyles(); 25 Application.SetCompatibleTextRenderingDefault(false); 26 Application.Run(new Form1()); 27 } 28 } 29 30 //---------防止程序多次运行----------// 31 public abstract class OneInStance 32 { 33 /// <summary> 34 /// 判断程序是否正在运行 35 /// </summary> 36 /// <param name="appld">程序名称</param> 37 /// <returns>如果程序第一次运行返回TRUE否则返回False</returns> 38 public static bool IsFirst(string appId) 39 { 40 bool ret = false; 41 42 if (OpenMutex(0x1F0001, 0, appId) == IntPtr.Zero) 43 { 44 CreateMutex(IntPtr.Zero, 0, appId); 45 ret = true; 46 } 47 48 return ret; 49 } 50 51 /// <summary> 52 /// 为现有的一个已命名互斥体对象创建一个新句柄 53 /// </summary> 54 /// <param name="dwDesiredAccess"></param> 55 /// <param name="bInheritHandle">如希望子进程能够继承句柄,则为TRUE</param> 56 /// <param name="lpName">要打开对象的名字</param> 57 /// <returns></returns> 58 [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] 59 private static extern IntPtr OpenMutex( 60 uint dwDesiredAccess, // access 61 int bInheritHandle, // inheritance option 62 string lpName // object name 63 ); 64 65 /// <summary> 66 /// 找出当前系统是否已经存在指定进程的实例。 67 /// 如果没有则创建一个互斥体。 68 /// CreateMutex()函数可用来创建一个有名或无名的互斥量对象: 69 /// </summary> 70 /// <param name="lpMutexAttributes">指向安全属性的指针</param> 71 /// <param name="bInitialOwner">初始化互斥对象的所有者</param> 72 /// <param name="lpName">指向互斥对象名的指针</param> 73 /// <returns></returns> 74 [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] 75 private static extern IntPtr CreateMutex( 76 IntPtr lpMutexAttributes, // SD 77 int bInitialOwner, // initial owner 78 string lpName // object name 79 ); 80 } 81 }