18,356
社区成员
发帖
与我相关
我的任务
分享
使用CreateMutex来创建互斥对象,如果在这之前本程序已经运行了,互斥对象就不能成功创建,这样就能判断在程序运行前是否已有一个本程序的实例在运行了。这种方法相对比较简单,而且很稳定。
在程序运行的初始化阶段加入以下代码:
void CreateOnly()
{
HANDLE hMutex = CreateMutex(NULL, false, "Only ");
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
HWND hMainForm=FindWindow(NULL,"你的程序的名称");
if(hMainForm) //如果程序已经运行,则将主画面提到最前面
{
MessageBox(NULL,"你的程序已经在运行了!","警告",MB_ICONINFORMATION);
SetForegroundWindow(hMainForm);
if(hMutex)
{
CloseHandle(hMutex);
}
exit(0);
}
}
。。。 。。。
}
注意CreateMutex的第三个参数,它指定了互斥对象的标志,系统就是根据此标志来识别是否是同一个互斥对象,为了防止别的程序和我们的程序使用相同的互斥对象造成程序无法运行,我建议大家创建一个GUID并且加上自己的信息作为标识,这样和别的程序标识相同的概率就几乎为0了。
在程序结束阶段别忘了关闭互斥对象的句柄:ReleaseMutex(hMutex)和CloseHandle(hMutex);