救急啊!哪位大侠有在同一PC防止程序起动两次(即运行两个)的代码.多谢!

sunwm 2004-04-09 01:24:19
救急啊!哪位大侠有在同一PC防止程序起动两次(即运行两个)的代码.多谢!
...全文
99 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
aabbss 2004-04-09
  • 打赏
  • 举报
回复
创建互斥对象的思路比较好,比如fieldwind的
byebyesubway 2004-04-09
  • 打赏
  • 举报
回复
记得findwindow时要用the window’s title当参数,开始我就忽略这个了
byebyesubway 2004-04-09
  • 打赏
  • 举报
回复
楼主啊,fieldwind(旷野之风)和Pipi0714(皮皮0714)的方法俺试过了,好用地~~~

谢大侠~

俺再好好琢磨琢磨。。。
fieldwind 2004-04-09
  • 打赏
  • 举报
回复
创建个互斥对象即可以了
如下,(加到youapp的InitInstanc()中)
HANDLE hObject = CreateMutex(NULL,FALSE,"LJPXYXC");
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hObject);
AfxMessageBox("程序已经运行!");
return FALSE;
}
1HelloWorld 2004-04-09
  • 打赏
  • 举报
回复
思路是判断该程序是否运行,如果运行了,就不做处理直接跳出来!
Pipi0714 2004-04-09
  • 打赏
  • 举报
回复
m_hMutex=CreateMutex(NULL,FALSE,"粮库考勤系统");
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;
}
Pipi0714 2004-04-09
  • 打赏
  • 举报
回复
我的思路是这样的:
第二程序启动的时候把第一个的窗口调出来
grasshopperliu 2004-04-09
  • 打赏
  • 举报
回复
引用别人的代码:可能对你有用。

///////////////////////////////////////////////////////////////////
//在你的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();
}
薛定谔之死猫 2004-04-09
  • 打赏
  • 举报
回复
看看以前的贴子,有人问过,有的用枚举进程来解决

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧