CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何得知程序的一个实例正在运行?

楼主flagfly(我也不知道要去哪里)2001-11-27 14:50:06 在 VC/MFC / 基础类 提问

我想在程序启动时判断如果已经有它的一个实例在运行,就向该实例发送一个消息,请问,如何得知它已经运行了? 问题点数:99、回复次数:15Top

1 楼hense(Hense)回复于 2001-11-27 15:09:59 得分 10

方法一:  
      FindWindow()  
  方法二:  
      CreateEvent()   /   OpenEvent();//named   event  
  方法三:  
      共享内存,计数器变量判断  
   
  Top

2 楼Cowboy22(西部牛仔)回复于 2001-11-27 15:11:48 得分 5

EnumWindows和FindWindow把它找出来。Top

3 楼pinel()回复于 2001-11-27 16:02:14 得分 3

进程间通信的文章看看Top

4 楼flagfly(我也不知道要去哪里)回复于 2001-11-27 16:02:58 得分 0

是用FindWindow的哪个参数,请再说得详细一些。  
  我用过FindWindow(NULL,   "test");//"test"为窗口名  
  这样用可以吗,如果要用第一个参数怎么用,有劳各位,回答者均有分。Top

5 楼Cowboy22(西部牛仔)回复于 2001-11-27 16:17:47 得分 5

有没有用过SPY++?它的FindWindow窗口里面的Class和Caption就是对应于这两个参数。Top

6 楼ysdesigned(清泉)回复于 2001-11-27 16:18:13 得分 5

第一个参数位窗口类名  
  FindWindow("SciCalc","计算器");Top

7 楼eggplant(拉拉)回复于 2001-11-27 16:21:55 得分 10

创建一个原子,程序启动后查找她,如果在,就退出,否则创建一个,然后启动。Top

8 楼alphagx(alpha)回复于 2001-11-27 16:30:55 得分 10

原子不好,如果程序非法退出的话就这个原子不能被Delete会一直存在于系统中则启动不了程序  
  你可以使用Mutex对象,即使程序非法退出Mutex对象也能被系统自动删除  
   
  程序启动去Create一个Mutex对象如果成功并且GetLastError()!=ERROR_ALREADY_EXISTS  
  启动程序,否则说明已有实例在运行,则退出Top

9 楼superdreamer(只懂一点点!)回复于 2001-11-27 17:01:28 得分 20

    我的是启动NETMEETING的程序,其他只需改char   lpszStr[64]="NetMeeting";为你的东西即可  
                                  char   lpszStr[64]="NetMeeting";  
  char   m_strWinText[254];  
  CWnd   *pPrevHwnd=NULL;  
  pPrevHwnd=CWnd::GetDesktopWindow   ()->GetWindow   (GW_CHILD);  
  while(*pPrevHwnd)  
  {  
  pPrevHwnd->GetWindowText   (m_strWinText,254);  
  if(strstr(m_strWinText,lpszStr)!=NULL)  
  {  
  MessageBox(m_ihWnd,"NetMeeting   已启动","提示",MB_OK);  
  if(pPrevHwnd->IsIconic())  
  pPrevHwnd->ShowWindow   (SW_RESTORE);  
  pPrevHwnd->SetForegroundWindow   ();  
   
  return;  
  }  
  pPrevHwnd=pPrevHwnd->GetWindow(GW_HWNDNEXT);  
  }  
  ShellExecute(m_ihWnd,"open","conf.exe",NULL,"C:\\Program   Files\\NetMeeting",SW_SHOWNORMAL);  
  Top

10 楼NowCan(城市浪人)回复于 2001-11-27 19:12:24 得分 10

用Mutex的话怎么发消息?Top

11 楼XDZXG()回复于 2001-11-27 19:13:14 得分 10

以下代码中m_hAppFlag是一个应用程序对象指针,通过下面方法就可以  
                  m_hAppFlag=CreateEvent(NULL,true,false,"m_pszExeName");  
  if(GetLastError()==ERROR_ALREADY_EXISTS)  
  {  
  ResetEvent(m_hAppFlag);  
  AfxMessageBox("系统正在运行",MB_ICONSTOP);  
  return   false;  
  }Top

12 楼yheysj(vc_help)回复于 2001-11-27 19:31:47 得分 5

楼上的兄弟太详细了!!我就不用了!!Top

13 楼loop000(木牛流马)回复于 2001-11-27 19:44:13 得分 3

enTop

14 楼flagfly(我也不知道要去哪里)回复于 2001-11-28 12:06:15 得分 0

各位的方法都很好,只不过针对我需要的情况,有些方法不适用,正如NowCan所说,用Mutex的话怎么发消息?    
   
  我想知道如果只知道应用程序名称,而不是窗口名,能否得到该应用程序的句柄。高手请再出手。Top

15 楼amoroso(鼠标)回复于 2001-11-28 12:15:01 得分 3

学习Top

相关问题

  • 如何让程序单实例运行?
  • 只运行一个JAVA程序实例
  • 怎样让VB程序只运行一个程序实例呢
  • 如何得知程序运行时间?
  • 怎样让我的MFC程序只能运行一个实例?
  • 在C#中如何让程序只运行一个实例
  • 如何让一个程序只有一个实例在运行?
  • 如何防止程序运行多个实例?
  • 如何让程序只运行一个实例,
  • 请问如何可以让程序只运行一个实例

关键词

  • 应用程序
  • 系统
  • null
  • pprevhwnd
  • 程序
  • 实例
  • happflag
  • lpszstr
  • strwintext
  • findwindow

得分解答快速导航

  • 帖主:flagfly
  • hense
  • Cowboy22
  • pinel
  • Cowboy22
  • ysdesigned
  • eggplant
  • alphagx
  • superdreamer
  • NowCan
  • XDZXG
  • yheysj
  • loop000
  • amoroso

相关链接

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

广告也精彩

反馈

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