下面的两种方法都是可以的
HANDLE hMap=CreateFileMapping((HANDLE)0xffffffff,NULL,PAGE_READWRITE,0,128,
"MutexRuning");
if(hMap==NULL)
{
AfxMessageBox("创建内存映射文件失败",MB_OK|MB_ICONSTOP);
return FALSE;
}
else if(GetLasError()==ERROR_ALREADY_EXISTS)
{
LPVOID lpMem=MapViewOfFile(hMap,FILE_MAP_WRITE,0,0,0);
CString str=(char *)lpMem;
UnmapViewOfile(lpMem);
CloseHandle(hMap);
AfxMessageBox(str,MB_OK|MB_ICONSTOP);
return FALSE;
}
else
{
//是第一次运行
LPVOID lpMem=MapViewOfFile(hMap,FILE_MAP_WRITE,0,0,0);
//程序运行描述信息
strcpy((char *) lpMem,"xxxx正在运行!");
UnmapViewOfFile(lpMem);
}
// HWND hOldInstance;
// if ((hOldInstance =::FindWindow(NULL, _T("LANMonitorClient"))) != NULL)
// {
// ShowWindow(hOldInstance,SW_RESTORE|SW_SHOWNORMAL);
// SetForegroundWindow(hOldInstance);
// return FALSE;
// }
本文介绍了一种利用内存映射文件来避免应用程序多实例启动的方法。通过创建一个名为MutexRuning的内存映射文件,如果该文件已存在,则表明已有实例在运行,并显示相关信息;若不存在,则创建并写入描述信息。

被折叠的 条评论
为什么被折叠?



