怎样判断该程序正在运行,并且限制只能有一个该程序在运行。 可以的话,希望给出示例。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BOOL CXXXXApp::InitInstance(){ //* プログラムの複数起動抑止 HWND hWndCap,hWndPopup; CString strCaption; HANDLE hPrevMutex = OpenMutex(MUTEX_ALL_ACCESS,FALSE,_T("h_XXXX_PrevInstance")); if(hPrevMutex) { CloseHandle(hPrevMutex); strCaption.LoadString(AFX_IDS_APP_TITLE); hWndCap = FindWindow(NULL,strCaption); if( hWndCap != NULL ){ } return FALSE; } hExeCheckMutex = CreateMutex(FALSE,0,"h_XXXX_PrevInstance"); return TRUE;}int CXXXXApp::ExitInstance(){ ReleaseMutex(hExeCheckMutex); return CWinApp::ExitInstance();} 如果进程的主窗口一直存在的话,可以用FindWindow()来控制也比较简单 BOOL CNcApp::RunOne(){ HANDLE hMap=CreateFileMapping((HANDLE)0xFFFFFFFF, NULL,PAGE_READWRITE, 0, 128,"MutexNc"); if(hMap==NULL) { AfxMessageBox("创建用于互斥运行的内存映射文件对象失败!",MB_OK|MB_ICONSTOP); return FALSE; } else if(GetLastError()==ERROR_ALREADY_EXISTS) { return false; HWND hWndPrevious=::FindWindow(NULL, "密码校验"); if (hWndPrevious!=NULL) { // 主窗口已最小化,则恢复其大小 if (::IsIconic(hWndPrevious)) ::ShowWindow(hWndPrevious,SW_RESTORE); // 将主窗激活 ShowWindow(hWndPrevious,SW_SHOW); ::SetForegroundWindow(hWndPrevious); // 将主窗的对话框激活 ::SetForegroundWindow(::GetLastActivePopup(hWndPrevious)); return false; // 退出本实例 } } else { LPVOID lpMem = MapViewOfFile(hMap, FILE_MAP_WRITE, 0,0,0); strcpy((char*)lpMem, "程序正在运行!"); UnmapViewOfFile(lpMem); } return true;} 在App的InitInstance中加入下代码HANDLE hSem = ::CreateSemaphore(NULL, 1, 1, _T("My Single Instance App"));if (::GetLastError() == ERROR_ALREADY_EXISTS){ ::AfxMessageBox(_T("该程序只能运行一个实例!")); return FALSE;} HANDLE hEve = ::CreateEvent(NULL, 1, 1, _T("My Single Instance App"));if (GetLastError() == ERROR_ALREADY_EXISTS){ AfxMessageBox(_T("该程序只能运行一个实例!")); return FALSE;} MFC中如何将用VFW获取的录像以时间作为文件名并保存到指定文件夹 CHtmlView 显示网页问题 怎么管理mdi的子窗口 怎么给工具栏上的按钮添加位图*_* 贺喜伯虎 写一段程序得到一个运行程序的窗口大小位置,如何做? “消息”(message)查找的的问题 哪有<<VC技术内幕>>第四版下载???有没有东莞地区的程序员??? 再问一个关于在VC中用ADO访问access2000数据库的问题 有人用过多媒体时钟吗?能给我一个小例子吗!谢了 怎么实现鼠标双击PICTURE控件弹出一个对话框????? 请问如何将CString转化为DWORD?
{
//* プログラムの複数起動抑止
HWND hWndCap,hWndPopup;
CString strCaption;
HANDLE hPrevMutex = OpenMutex(MUTEX_ALL_ACCESS,FALSE,_T("h_XXXX_PrevInstance"));
if(hPrevMutex)
{
CloseHandle(hPrevMutex);
strCaption.LoadString(AFX_IDS_APP_TITLE);
hWndCap = FindWindow(NULL,strCaption); if( hWndCap != NULL ){
}
return FALSE; }
hExeCheckMutex = CreateMutex(FALSE,0,"h_XXXX_PrevInstance");
return TRUE;
}
int CXXXXApp::ExitInstance()
{
ReleaseMutex(hExeCheckMutex);
return CWinApp::ExitInstance();
}
{
HANDLE hMap=CreateFileMapping((HANDLE)0xFFFFFFFF, NULL,PAGE_READWRITE, 0, 128,"MutexNc");
if(hMap==NULL)
{
AfxMessageBox("创建用于互斥运行的内存映射文件对象失败!",MB_OK|MB_ICONSTOP);
return FALSE;
}
else if(GetLastError()==ERROR_ALREADY_EXISTS)
{
return false;
HWND hWndPrevious=::FindWindow(NULL, "密码校验");
if (hWndPrevious!=NULL)
{
// 主窗口已最小化,则恢复其大小
if (::IsIconic(hWndPrevious))
::ShowWindow(hWndPrevious,SW_RESTORE);
// 将主窗激活
ShowWindow(hWndPrevious,SW_SHOW);
::SetForegroundWindow(hWndPrevious);
// 将主窗的对话框激活
::SetForegroundWindow(::GetLastActivePopup(hWndPrevious));
return false;
// 退出本实例
}
}
else
{
LPVOID lpMem = MapViewOfFile(hMap, FILE_MAP_WRITE, 0,0,0);
strcpy((char*)lpMem, "程序正在运行!");
UnmapViewOfFile(lpMem);
}
return true;
}
{
::AfxMessageBox(_T("该程序只能运行一个实例!"));
return FALSE;
}
{
AfxMessageBox(_T("该程序只能运行一个实例!"));
return FALSE;
}