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 }