社区
C#
帖子详情
判断程序,只能开一次。
whcyl
2007-09-01 05:28:04
想写个程序,只能开一次,这样的需求的比如有QQ游戏(当然不考虑多开外挂)。
如果没有开的话,就可以直接开程序,如果开了的话不是提示“不能多开了”,而是跳到去显示已经开了的那个程序界面里面。
我知道可以利用判断进程。可是具体的实现还是有点迷糊,请大家帮帮,谢谢
...全文
325
23
打赏
收藏
判断程序,只能开一次。
想写个程序,只能开一次,这样的需求的比如有QQ游戏(当然不考虑多开外挂)。 如果没有开的话,就可以直接开程序,如果开了的话不是提示“不能多开了”,而是跳到去显示已经开了的那个程序界面里面。 我知道可以利用判断进程。可是具体的实现还是有点迷糊,请大家帮帮,谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
a523194491
2008-05-28
打赏
举报
回复
写注册表和写文件都不可取,如果程序非法退出后标记没有取消,以后就可以不用运行了这个程序了,呵呵
破碎的脸
2008-05-28
打赏
举报
回复
晕,一堆解决办法,最简单的,就是开一个TCP或UDP端口,扔那里,管都不用管。。
破碎的脸
2008-05-28
打赏
举报
回复
晕,一堆解决办法,最简单的,就是开一个TCP或UDP端口,扔那里,管都不用管。。
benjerry
2008-05-28
打赏
举报
回复
可以考虑在旁边的xml文件或者ini文件中写一个标识,如果为某个特定值,则说明已打开,反之说明没有开
tigerleq
2008-05-28
打赏
举报
回复
[Quote=引用 9 楼 LeoMaya 的回复:]
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;
namespace YourApplication
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
…
[/Quote]
gaofenfei
2008-05-28
打赏
举报
回复
xuexi
c863123
2008-05-28
打赏
举报
回复
[Quote=引用 9 楼 LeoMaya 的回复:]
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;
namespace YourApplication
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
…
[/Quote]
正解。。。
wang2034
2008-05-28
打赏
举报
回复
/// <summary>
/// SKSingleApplication 的摘要说明。
/// </summary>
public class SKSingleApplication
{
public SKSingleApplication()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region 静态私有变量
static Mutex m_LockKey;
#endregion 静态私有变量
#region 公共静态方法
/// <summary>
/// 单实例运行
///
/// </summary>
/// <param name="frmMain"></param>
///
public static void Run(Form frmMain, string lockKey)
{
if (IsLock(lockKey))
{
Application.ApplicationExit += new EventHandler(Application_ApplicationExit); Application.Run(frmMain);
}
else
{
MessageBox.Show("您已经启动了一套软件!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
#endregion 公共静态方法
#region 私有静态方法
/// <summary>
/// 是否已经锁定
/// </summary>
/// <returns></returns>
///
private static bool IsLock(string lockKey)
{
m_LockKey = new Mutex(false, lockKey);
bool bLocked = false;
bLocked = m_LockKey.WaitOne(TimeSpan.Zero, false);
return bLocked;
}
private static void Application_ApplicationExit(object sender, EventArgs e)
{
m_LockKey.ReleaseMutex();
m_LockKey.Close();
}
#endregion 私有静态方法
}
zjz8204
2008-05-28
打赏
举报
回复
怎么个消息法?可否说一下啊?
另外,可以用注册表建一个值,也可以在开启应用程序时看是否已有相应进程,若有就不再运行,若无就运行
富莱工作室
2007-09-03
打赏
举报
回复
程序一运行就创建一命名互斥体, 检测返回, 如果为现有, 程序即退出
joejan
2007-09-03
打赏
举报
回复
在线程里查有无你的程序.有就不再执行.
suxe
2007-09-03
打赏
举报
回复
private static bool IsProgramRuning()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName (current.ProcessName);
//遍历正在有相同名字运行的例程
foreach (Process process in processes)
{
//忽略现有的例程
if (process.Id != current.Id)
{
//确保例程从EXE文件运行
if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") ==
current.MainModule.FileName)
{
return true;
}
}
}
return false;
}
lovefootball
2007-09-03
打赏
举报
回复
http://blog.csdn.net/Knight94/archive/2006/03/16/625809.aspx
whcyl
2007-09-03
打赏
举报
回复
D
huing
2007-09-03
打赏
举报
回复
我用消息实现了,但也学习一下其它方法
极地_雪狼
2007-09-03
打赏
举报
回复
API中有一个函数
love_virus
2007-09-03
打赏
举报
回复
请参照 设计模式中的 单件模式
成都慢生活
2007-09-03
打赏
举报
回复
懒人方法:
打开程序时,写注册表,修改一个值,每次打开程序去找这个值并判断。
富莱工作室
2007-09-03
打赏
举报
回复
正解
LeoMaya
2007-09-03
打赏
举报
回复
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;
namespace YourApplication
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
bool vExists;
Mutex vMutex = new Mutex(false, "YourApplication", out vExists);
if (!vExists)
{
MessageBox.Show("程序已经启动!");
return;
}
else
{
vMutex.WaitOne();
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
加载更多回复(3)
C#如何让同一个窗口
只能
打
开
一次
和一个
程序
只能
同时打
开
一个
1、C#如何让同一个窗口
只能
打
开
一次
public Form2() { InitializeComponent(); } private static Form2 f2 = new Form2(); public static Form2 getf2() {
Winform
一次
只能
打
开
一个应用
程序
,再次打
开
,不会打
开
新应用
程序
/// [STAThread] static void Main() { //0106add
一次
打
开
一个应用
程序
Process instance = RunningInstance(); if (instance != null) { if (instance.MainWindowHandle.ToInt32() == 0) //是否托盘化 { ...
使应用
程序
只能
运行
一次
,第二次运行显示上次
程序
// 此
程序
只能
运行
一次
,用互斥量来
判断
程序
是否已运行 HANDLE m_hMutex=CreateMutex(NULL,TRUE, m_pszAppName); if(GetLastError() == ERROR_ALREADY_EXISTS) { ReleaseMutex(m_hMutex); HWND hHWND = ::...
qt
程序
设置同时
只能
运行一个,避免重复打
开
设置qt
程序
只能
打
开
一个,避免重复打
开
Qt中设置
程序
只能
运行一个
程序
创建时在内存中
开
辟一块内存,在运行时根据内存a是否已经建立
判断
程序
是不是唯一运行。 int main(int argc, char *argv[]) { QApplication a(argc, argv); static QSharedMemory *shareMem = new ...
C#
110,537
社区成员
642,576
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章