CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

关于如何禁止应用程序的多个实例运行的问题?

楼主iamsureone(小网)2001-12-21 11:04:11 在 VC/MFC / 基础类 提问

如果当前我的应用程序已经有一个实例在运行,我要从命令行方式打开一个文档的时候用当前的实例打开,而不需要再启动一个实例? 问题点数:20、回复次数:2Top

1 楼whiskers(胡子)回复于 2001-12-21 11:11:55 得分 10

将以下代码加入CXxxxApp::InitInstance()的开始即可  
  ::CreateMutex(NULL,   TRUE,   m_pszExeName);    
  if(ERROR_ALREADY_EXISTS   ==   GetLastError())    
  {    
  CWnd*   pPrevHwnd   =   CWnd::GetDesktopWindow()->GetWindow(GW_CHILD);    
  while(pPrevHwnd)    
  {    
  if(::GetProp(pPrevHwnd->GetSafeHwnd(),   m_pszExeName))    
  {    
  if(pPrevHwnd->IsIconic())    
  {    
  pPrevHwnd->ShowWindow(SW_RESTORE);    
  }    
  pPrevHwnd->SetForegroundWindow();    
  pPrevHwnd->GetLastActivePopup()->SetForegroundWindow();    
  return   FALSE;    
  }    
  pPrevHwnd   =   pPrevHwnd->GetWindow(GW_HWNDNEXT);    
  }    
  TRACE("Could   not   found   previous   instance   main   window   !");    
  return   FALSE;    
  }    
  //   设置标记,以便寻找窗口。在   Destroy   时删除:    
          ::SetProp(m_pMainWnd->GetSafeHwnd(),   m_pszExeName,   (HANDLE)1);Top

2 楼xiaoxiaohan(萧晓寒)回复于 2001-12-21 11:14:51 得分 10

int   WINAPI   WinMain(   HINSTANCE   hInstance,   HINSTANCE   hPrevInstance,   LPSTR   lpCmdLine,   int   nCmdShow)  
  {  
  HANDLE   hNew             =   NULL;  
  DWORD     dwErrCode   =   0;  
   
  hNew   =   CreateMutex(   NULL,   FALSE,   "{FA123-DKJKL-43443-643FJD3}"   );  
  if   (   hNew   ==   NULL   )  
  {  
                  return   0;  
  }  
  dwErrCode   =   GetLastError(     );  
          if   (   dwErrCode   ==   ERROR_ALREADY_EXISTS   )  
          {  
                  CloseHandle(   hNew   );  
                  return   0;  
          }  
          //   This   is   the   first   instance   of   this   application   running.  
          ……  
          ……  
          ……  
          //   Before   exiting,   close   the   object.  
          CloseHandle(   hNew   );  
          return   0;  
  }  
  测试过Top

相关问题

  • 如何禁止应用程序启动多个实例?即同时运行多个相同的程序?
  • 如何在C#的WINDOWS应用程序中禁止运行一个程序的多个实例?
  • 如何利用Mutex实现应用程序的单实例运行
  • 如何保证某一时刻只能运行应用程序的一个实例
  • 如何有效地通过编程禁止某个特定应用程序的运行?
  • 让应用程序只运行一次
  • 关于“应用程序正在运行!”
  • 怎么运行java的应用程序
  • C#的应用程序的运行
  • 无法运行asp.net web应用程序。

关键词

  • null
  • pprevhwnd
  • hnew
  • 实例
  • dwerrcode
  • pszexename
  • hinstance

得分解答快速导航

  • 帖主:iamsureone
  • whiskers
  • xiaoxiaohan

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo