庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>程序设计>汇编语言>技巧教程>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

处理程序多重启动

 作者:本站收集   日期:2005-8-1 15:50:33
字号选择〖 〗/ 双击滚屏 单击停止   

  建议使用MASM for EditPlus进行测试。
  正如"防止程序多重启动"一文所说,当已经知道自己的实例在运行了,为了节省资源,下个实例需要退出,可是用户需要打开文件,如果不处理就退出,那用户不破口大骂才怪,所以,就需要退出之前进行处理。
  首先要讲一个小知识,当Windows程序退出的时候,Windows会自己清除当前进程所占用的所有资源,除了动态DLL(静态DLL也会自动释放,对于运行时动态加载的DLL,释放工作是由用户完成的,尽管Windows会检查它是否已经没有被使用,但是有时候由于特殊的原因它将不会被释放),这就是一个操作系统所谓的资源回收(忘了英文单词,好像是这么说吧),那么,问题就来了,当程序在退出的时候,尽管可以向其它程序(如自身的实例)发送消息,但是问题是如何传递资源,在这里是传递一个字符串,而传递的资源是又当前进程中的地址,按Windows的资源回收来说,当程序退出时传递的字符串地址已经不存在了,那如何才能传递一个正确的字符串给前一实例呢?
  我们可以使用API中的消息WM_SETTEXT与WM_GETTEXT,这两个消息发送后是立即返回的,这样当前进程能在发送完消息后立即退出,而SendMessage函数在发送消息时会判断当前消息是否是WM_SETTEXT与WM_GETTEXT,如果是,则SendMessage并不单单发送一个消息,而会创建一个内存映像(标准叫映射)文件,把需要传递的字符保存到这个内存映像中,然后再把内存映像的地址做为参数传给目标窗体,而内存映像是可以在程序之间共享的,这样就间接的做到了传递资源:
... ...
.DATA
   szClassName db "WinASM_Class",0
.data?
   lpCommandLine DD ?

.CODE
START:
   ... ...
   invoke GetCommandLine
   mov lpCommandLine, eax
   invoke FindWindow,offset szClassName,NULL   ;查找自身类
   cmp eax,0
   jnz @F
      invoke WinMain....
      invoke ExitProcess,0
   @@:
   invoke SendMessage,eax,WM_SETTEXT,0,lpCommandLine
   invoke ExitProcess,1      ;记得发生错误后返回非零值,尽管这个不是错误。
   ......


  因此,我们还需要自己来处理WM_SETTEXT消息:
... ...
.elseif uMsg==WM_SETTEXT
   invoke MessageBox,0,lParam,0,0

  在模板相关地方添加上述代码后,运行一下,你会发现第二个实例会马上退出,但是第一个实例会在第二个实例退出的那一瞬弹出一个信息框,如果第二个实例启动时你传递了参数,那么你对照一下,信息框中的信息就是第二个实例的尾部参数。
  这样你就可以在WM_SETTEXT消息中进行处理了,如打开实例传过来的文件。

上一篇:防止程序多重启动    下一篇:宏的再认识  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-8-1 15:50:33
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿