导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

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

sunwm 2004-04-09 01:24:19
救急啊!哪位大侠有在同一PC防止程序起动两次(即运行两个)的代码.多谢!
...全文
44 点赞 收藏 9
写回复
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();
}
回复
看看以前的贴子,有人问过,有的用枚举进程来解决
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

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