• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >汇编语言 > 汇编处理程序多重启动

汇编处理程序多重启动

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了交通事故处理程序规定,驾驶证违章处理程序,会计账务处理程序,医疗纠纷处理程序,会计账务处理程序图等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>

建议使用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消息中进行处理了,如打开实例传过来的文件。

</div> </div> </div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 汇编处理程序多重启动

相关文章

  • 2017-06-28汇编源代码之CIH文件型病毒检测消除程序
  • 2017-06-28汇编源代码之获得操作系统版本
  • 2017-06-28VxD程序入门
  • 2017-06-28Casl汇编语言辅导
  • 2017-06-28一个汇编hello world程序
  • 2017-06-28什么是动态链接库
  • 2017-06-1780x86寻址方式
  • 2017-06-28汇编源码系列之ctrladel
  • 2017-06-28如何创建汇编工作环境
  • 2017-06-17中断指令

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 汇编创建简单的窗口
    • 标志位设置指令
    • 扩展Int 13H调用规范
    • 汇编语言的艺术-观念正误(五)
    • 宏与子程序的区别
    • 汇编语言的艺术-准备工作(一)
    • 了解汇编命令行参数
    • 宏汇编
    • 外部设备
    • 汇编源代码之MAKE SOUNDS(发声)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有