救急啊!哪位大侠有在同一PC防止程序起动两次(即运行两个)的代码.多谢!
解决方案 »
- 真心求链接错误!recompile module,谢谢耐心的你!
- C#控制台时,怎么在循环显示数时显示在同一行
- 菜鸟求助win SDK编程中combobox控件的使用
- 欢迎高人讨论赐教:WSASend的lpBuffers有可能因为底层的发送缓冲不足而被锁定,那么很多的Overlap I/O锁定同一块内存,不会出其他问题吧
- 很简单的菜鸟问题,先谢谢
- 如果获得其他进程的启动命令参数(其他程序已经运行了的)
- 如何使用vc++设计一个地图染色程序(最多可使用4种颜色)
- 《Visual C++技术内幕》应该任何看效果好?咨询!!
- 如何装载不同语言的资源文件?
- C:\CAB&SIGN\CABARC -s 6144 webdvr.CAB webdvr.ocx webdvr.INF
- 怎样可以获得WINDOWS窗口的标题栏高度和菜单的高度?(在先等待)
- 请问发送支持smtp认证的电子邮件?谢谢
//在你的app里设置这两个变量
HANDLE hMutex;
HANDLE hFileMap;
//然后
BOOL CYourProApp::InitInstance()
{
hMutex = CreateMutex(NULL,TRUE,"MutexApp");
if(hMutex)
{
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
HANDLE hMapFile;
LPVOID lpMapAddress;
hMapFile = OpenFileMapping (FILE_MAP_ALL_ACCESS,FALSE, "SharedMemory");
lpMapAddress = MapViewOfFile(hMapFile,FILE_MAP_ALL_ACCESS,0,0,0);
DWORD *pHwndData = (DWORD*)lpMapAddress;
HWND hWnd = (HWND)(*pHwndData);
SetForegroundWindow(hWnd);//设置程序到前台
UnmapViewOfFile(hMapFile);
return FALSE; }
}
hFileMap = CreateFileMapping((HANDLE)(0xFFFFFFFF),NULL,PAGE_READWRITE,0,1024,"SharedMemory");
LPVOID lpData = MapViewOfFile(hFileMap,FILE_MAP_ALL_ACCESS,0,0,0);
DWORD *pHwndData = (DWORD*)lpData;
*pHwndData = (DWORD)YourMainWnd->m_hWnd;
//以上一段代码的作用是将程序的句柄保存起来,留到以后调到前台
// your other init code
return TRUE;}//最后
int CYourProApp::ExitInstance()
{
CloseHandle(hMutex);
CloseHandle(hFileMap);
return CWinApp::ExitInstance();
}
if(GetLastError()==ERROR_ALREADY_EXISTS)
{
HWND hWnd=::FindWindow(NULL,"粮库考勤系统");
if(hWnd)
{
if(::IsIconic(hWnd))
::ShowWindow(hWnd,SW_RESTORE);
::SetForegroundWindow(hWnd);
::SetForegroundWindow(::GetLastActivePopup(hWnd));
}
else
MessageBox(NULL,"您的程序已经运行了","提示信息",MB_ICONINFORMATION);
return FALSE;
}
如下,(加到youapp的InitInstanc()中)
HANDLE hObject = CreateMutex(NULL,FALSE,"LJPXYXC");
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hObject);
AfxMessageBox("程序已经运行!");
return FALSE;
}