中国最大的教育门户网站 中国教育家协会 香港监制 本站首页 | 网站介绍 | 广告服务 | 与我联系
今天是

在线留言
首页 |
新闻 |
博客 |
考研 |
高考 |
留学 |
外语 |
高教 |
幼教 |
职教 |
民办教育 |
基础教育 |
自考成考 |
中外合作 |
资源中心
论坛 |
社区 |
交友 |
校园 |
招生 |
培训 |
征稿 |
文学 |
商城 |
招聘 |
教育装备 |
会员学校 |
比赛活动 |
在线报名 |
教育书店
当前位置:首页 >> 行业动态 >> 经验交流 >> 正文
站内搜索
今天是 欢迎访问中国教育网新版
程序开发 用VC++实现控制程序运行唯一实例
来源:天极网     2006-4-15 16:05:00
 
  有时候在开发应用程序时,希望控制程序运行唯一的实例。例如,最常用的mp3播放软件Winamp,由于它需要独占计算机中的音频设备,因此该程序只允许自身运行唯一的一个例程。在Visual C++的开发实践中,对于16位的Windows系统,应用程序的hPrevInstance句柄保存了应用程序上一个运行的实例,可以用该值来检查是否有实例运行;然而在32位Windows系统下,这个值总是NULL,所以无法利用该值来实现程序运行唯一实例。本实例给出了解决这个问题的简单办法,只要将程序中稍微改动一下就可以了。

  一、 实现方法

  对于具有窗口的应用程序,可以用静态函数CWnd::FindWindow()查找固定窗口,来判断程序是否已经运行。函数原型为:

CWnd* PASCAL FindWindow( LPCTSTR lpszClassName, LPCTSTR lpszWindowName );

  这个函数有两个参数,第一个是要找的窗口的类,第二个是要找的窗口的标题。在搜索的时候不一定两者都知道,但至少要知道其中的一个。有的窗口的标题是比较容易得到的,如"计算器",所以搜索时应使用标题进行搜索。但有的软件的标题不是固定的,如"记事本",如果打开的文件不同,窗口标题也不同,这时使用窗口类搜索就比较方便。如果找到了满足条件的窗口,这个函数返回该窗口的指针,否则返回值为NULL。

  考虑到程序的健壮性,我们还需要判断窗口是否处于最小化状态、是否有弹出式子窗口,这就需要使用CWnd:: GetLastActivePopup()、CWnd::IsIconic()函数,它们的原型分别为:

CWnd* GetLastActivePopup( )

  该函数返回一个指定父窗口中最近激活过的弹出式窗口的指针。如果窗口本身是刚刚激活的,或窗口不包含任何弹出窗口,那么该函数返回指向父窗口自身的指针。

BOOL IsIconic( )

  该函数用来判断当前窗口是否处于最小化状态,如果窗口处于最小化状态,函数返回值为True,否则返回Flase。

  对于处于最小化状态的窗口,可以调用CWnd::ShowWindow( int nCmdShow )恢复窗口的正常状态,该函数的原型为:

BOOL ShowWindow( int nCmdShow )

  如窗口之前是可见的,函数调用后返回True,否则返回False。参数nCmdShow的值可以为以下任意个常数:

  SW_HIDE:隐藏窗口,活动状态给令一个窗口;

  SW_MINIMIZE:最小化窗口,活动状态给另一个窗口;

  SW_RESTORE:用原来的大小和位置显示一个窗口,同时令其进入活动状态;

  SW_SHOW:用当前的大小和位置显示一个窗口,同时令其进入活动状态;

  SW_SHOWMAXIMIZED:最大化窗口,并将其激活;

  SW_SHOWMINIMIZED:最小化窗口,并将其激活;

  SW_SHOWMINNOACTIVE:最小化一个窗口,同时不改变活动窗口;

  SW_SHOWNA:用当前的大小和位置显示一个窗口,不改变活动窗口;

  SW_SHOWNOACTIVATE:用最近的大小和位置显示一个窗口,不改变活动窗口;

  SW_SHOWNORMAL:与SW_RESTORE相同;

  最后不要忘记了用CWnd:: SetForegroundWindow()函数将弹出窗口设置为桌面的最前端。


  有了上面的知识,我们就可以修改程序中应用程序类的InitInstance()函数,如果程序已经运行,也即是可以发现相应的程序窗口,那么就显示该窗口,InitInstance()函数就返回False,程序提前退出,否则就正常运行。

  二、 编程步骤

  1、 启动Visual C++6.0,生成一个基于对话框的应用程序,程序命名为"Instance";

  2、 修改程序的InitInstance()函数;

  3、 添加代码,编译运行程序;
■相关链接  
站内资讯搜索:  
焦 点 事 件 人 物 评 谈
明年云南求职毕业生将超10万 文科生需求量减50%[图]
教育部规范成招 不得擅自超计划招生[图]
全球经济危机令金融教育比以往更重要[图]
清华09考研报名人数5年来首增 MBA增幅超11%[图]
热点专题
·联想·闪联携“闪联任意通…
·英国剑桥大学携手Aruba打造…
·让青春在校园电波中激荡
·调查指七成内地香港学生很…
·山东省招考院辟谣:高考拟统…
·国家公考前一天:充足准备…
·幼儿清火,宜用中西结合、…
·科学生活:谨防对幼儿重智…
·上海现10例以上疑似水痘 幼…
·带薪留学减轻工薪家庭出国…
更多..
最新快讯
·汇率变化渐趋稳定 专家提…
·海大一教师获得高层次留学…
·享受国外优质资源:先留学…
·教育部紧急要求 开展寄宿学…
·“找工”大战如何胜出 200…
·教育时评:择校费比教师吃…
·想当国家公务员先考你如何…
·遇就业寒冬频改职业规划 大…
·企业谏言毕业生:“美容”…
·四川:冷却两年的考研今年升…
更多..
热门推荐
·全国优秀培训机构
·中国教育网频道说明
·全国优秀教育机构推荐
·频道诚征兼职主管/主编
·职业、职称考试网络课程
·08年全国各地院校招生就业展
·08年全国各地院校招生计划展
·08年中国各地艺术院校推荐
·08中国**省十强中学评选展示

中国教育家协会 教协会员理事 香港监制
中华人民共和国 京ICP备08005247号
香港通讯地址:香港兴发街邮政局38062号信箱  中国香港特区政府注册登记号:18159887-030-01-02-5
业务及合作热线:010-64803658 客服电话:010-64803331
信息发布:bj64803331@126.com 欢迎合作:cn13801018949@hotmail.com