static class Program{ [STAThread]static void Main(){bool createNewusing (Mutex mutex = new Mutex(true, Application.ProductName, out createNew)){if (createNew){Application.EnableVisualStyles() Application.SetCompatibleTextRenderingDefault(false) Application.Run(new Form1()) } else{// 程序已经运行,显示提示后退出MessageBox.Show("应用程序已经运行!") }}}}
防止多开设置如下:.DLL命令 创建事件对象, 整数型, "kernel32", "CreateEventA"
.参数 安全特性, 整数型
.参数 重设事件, 逻辑型
.参数 触发状态, 逻辑型
.参数 对象名字, 文本型
.DLL命令 打开事件对象, 整数型, "kernel32", "OpenEventA"
.参数 访问方法, 整数型
.参数 句柄继承, 逻辑型
.参数 对象名字, 文本型
.DLL命令 关闭事件对象, 整数型, "kernel32", "CloseHandle"
.参数 对象句柄, 整数型
2、写个子程序:
.子程序 程序是否已运行, 逻辑型, 公开, 真表示已经运行,假表示还未运行
.参数 标志文本, 文本型, , 可以是任何文本,但是最好要长一点以保证和系统中已有其他事件对象的名称不相冲突。
.如果真 (打开事件对象 (2031619, 假, 标志文本) ≠ 0)
返回 (真)
.如果真结束
事件对象句柄 = 创建事件对象 (0, 假, 假, 标志文本)
返回 (假)
.子程序 关闭事件对象, , 公开, 窗口销毁时调用
关闭事件对象 (事件对象句柄)
3、添加一个变量,程序集的。
.程序集变量 事件对象句柄, 整数型
4、使用时在窗口的“创建完毕”与“将被销毁”事件写入代码:.子程序 __启动窗口_创建完毕
.如果真 (程序是否已运行 (“禁止多次运行”) = 真)
信息框 (“程序已经运行!”, 0, )
销毁 ()
.如果真结束
.子程序 __启动窗口_将被销毁
关闭事件对象 ()
1楼太复杂,2楼不靠谱,三楼……
我的方法是:
是一个易程序同时只能打开一个吗?
置顶设置如下:把窗口总在最前属性设为真。
防止多开设置如下:
1、添加dll命令,有关判断事件对象的。
.版本 2
.DLL命令 创建事件对象, 整数型, "kernel32", "CreateEventA"
.参数 安全特性, 整数型
.参数 重设事件, 逻辑型
.参数 触发状态, 逻辑型
.参数 对象名字, 文本型
.DLL命令 打开事件对象, 整数型, "kernel32", "OpenEventA"
.参数 访问方法, 整数型
.参数 句柄继承, 逻辑型
.参数 对象名字, 文本型
.DLL命令 关闭事件对象, 整数型, "kernel32", "CloseHandle"
.参数 对象句柄, 整数型
2、写个子程序:
.版本 2
.子程序 程序是否已运行, 逻辑型, 公开, 真表示已经运行,假表示还未运行
.参数 标志文本, 文本型, , 可以是任何文本,但是最好要长一点以保证和系统中已有其他事件对象的名称不相冲突。
.如果真 (打开事件对象 (2031619, 假, 标志文本) ≠ 0)
返回 (真)
.如果真结束
事件对象句柄 = 创建事件对象 (0, 假, 假, 标志文本)
返回 (假)
.子程序 关闭事件对象, , 公开, 窗口销毁时调用
关闭事件对象 (事件对象句柄)
3、添加一个变量,程序集的。
.版本 2
.程序集变量 事件对象句柄, 整数型
4、使用时在窗口的“创建完毕”与“将被销毁”事件写入代码:
.版本 2
.子程序 __启动窗口_创建完毕
.如果真 (程序是否已运行 (“禁止多次运行”) = 真)
信息框 (“程序已经运行!”, 0, )
销毁 ()
.如果真结束
.子程序 __启动窗口_将被销毁
关闭事件对象 ()
然后效果如下:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)