用MFC写了一个采集软件,现在的问题是,多次点击release文件后会运行好几个同样的软件,而现在要求在已经打开一个当前软件的情况下,再去点击它就不让打开了,就是一台电脑只能控制它运行一个我们的软件,不允许同时开多个。
之前在配置文件里加了一个变量控制,但是这样很不安全,因为配置文件是可写的
之前在配置文件里加了一个变量控制,但是这样很不安全,因为配置文件是可写的
解决方案 »
- VC应用程序弹出“不支持尝试执行的操作”
- CListCtrl 闪
- com为什么不允许接口类中 (函数重载)?
- MFC DirectShow 开发:link时出错Error LNK2001
- VC的工程如何转化为dll?
- 谁用过大数据量CMap,百万级以char[]做key,效率如何?需要插入,查找.用什么实现效率比较高??
- 关于 rand() 函数求随机数的问题~~~~
- 谁有dao的数据库驱动程序?help
- 请问高手:谁知道Delta Flow 压缩算法是怎么回事(PCL5打印指令中提到过!)?
- 今天才发现?!(vc++/c)(请再看看,不好意思,刚才漏了地址符.)
- 找人开发软件
- vc对sql server进行修改
{TCHAR strAppName[] = TEXT("OnlyOne");
HANDLE hMutex = NULL;//创建互斥对象
hMutex = CreateMutex(NULL, FALSE, strAppName);
if (hMutex != NULL)
{
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
MessageBox(NULL,TEXT("不是第一次运行这个程序。"),TEXT("OnlyOne"),MB_OK | MB_ICONINFORMATION);
//关闭互斥对象,退出程序
CloseHandle(hMutex);
return (-1);
} else
{
MessageBox(NULL,TEXT("第一次运行这个程序。"),TEXT("OnlyOne"),MB_OK | MB_ICONINFORMATION);
}
} else
{
MessageBox(NULL,TEXT("创建互斥对象失败。"),TEXT("OnlyOne"),MB_OK | MB_ICONINFORMATION);
}
//关闭互斥对象
CloseHandle(hMutex);
return (-1);}
HANDLE hMutex = NULL;
hMutex = CreateMutex(NULL, FALSE, strAppName);
if (hMutex != NULL)
{
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
PostQuitMessage(0);
}
}
if (m_hMutex)
{
if (ERROR_ALREADY_EXISTS == GetLastError())
{
IsFirst = FALSE;
ReleaseMutex(m_hMutex);
CloseHandle(m_hMutex);
}else
{
IsFirst = TRUE;
m_myhandle = m_hMutex;
}
}
别忘了退出的时候关闭hMutexStep 1:
CPro01App类中定义如下:
public:
HANDLE hMutex;step 2:
BOOL CPro01App::InitInstance()
{
;;;;;;;
hMutex = CreateMutex(NULL, FALSE, "EnglishPro7_CET4");
if(hMutex == NULL || ERROR_ALREADY_EXISTS==::GetLastError())
{
//AfxMessageBox(" 程序已经运行或正在清理数据! 按\"确定\"强制退出!");
exit(0);
}
}Step 3:
int CPro01App::ExitInstance()
{
::CloseHandle(hMutex);
hMutex = NULL;
}
{if (GetLastError()== ERROR_ALREADY_EXISTS)
{
return FALSE;
}