防止并处理程序的多重启动

Author: 谢肇波 Date: 2001年 35期

?牐犑裁唇蟹乐褂氪?理多重启动?假设asp文件与EditPlus关联,你双击一个asp文件,Windows系统自动使用EditPlus打开asp文件,然后再双击一个asp文件,这个时候,你发现并没有再启动一个EditPlus,而是已经启动的那个EditPlus截获了第二个副本启动的参数(它打开了你第二次双击的文件),具体说,是接收了其副本发送过来的信息(Message),这就使程序能防止自身多重启动,这样有利于节省资源。这是一项很令人兴奋的功能,在VB中如何实现呢?
  ?牐牬蠖嗍笥芽赡芟氲搅薃PI,当然,使用API肯定可以做到!不过,我这次实现这个功能,完全没有使用API,只是使用了VB中的两个普通函数SaveSetting与GetSetting。并且非常简单,比API更高效!不信?看下去!
  ?牐犚蛭诔绦蚓】赡苌僬寄诖媸弊鞒雠卸希裕ㄒ榘哑舳录栉狹ain(),因为,此时还未加载任何窗体与控件。
  ?牐犑紫龋舳桓龉こ蹋砑右桓瞿?椋桓黾剖逼鱰imer1,interval设为100。然后,选择菜单“工程→工程属性→启动对象”,单击下拉框选择“Sub Main”,你会看到,在模块中已经添加了这个过程,在模块中输入以下代码:
  ?牐牐ё远ㄒ搴靡源?理参数
  ?牐燩ublic Function getprom(prom)
  ?牐營f prom = "" Then Exit Function
  ?牐爂etprom = prom
  ?牐營f Asc?煟╬rom) = 34 Then
  ?牐牐?判断是否为双引号,如果是则去掉参数两边的双引号
  ?牐爂etprom =Mid(prom,2,Len(prom)- 2)??
  ?牐燛nd If
  ?牐燛nd Function
  ?牐燬ub Main()
  ?牐燚im commandstring As String
  ?牐燾ommandstring = VBA.Command
  ?牐牐Щ袢〔问?
  ?牐營f App.PrevInstance = True Then
  ?牐牐?判断自身是否已经在运行
  ?牐燾ommandstring = Form1.getprom(commandstring)
  ?牐燬aveSetting App.EXEName,"参数信息","command",commandstring '保存尾部参数(文件路径)到注册表中
  ?牐燛nd '然后退出
  ?牐燛lse
  ?牐燾ommandstring = Form1.getprom(commandstring)
  ?牐燜orm1.Picture = LoadPicture(commandstring)
  ?牐燜orm1.Visible = True
  ?牐燛nd If
  ?牐燛nd Sub
  ?牐犖伺卸献⒉岜碇械牟问ㄎ募肪叮┦欠裾罚墒褂梦募低扯韵螅‵ileSystemObjcet)的FileExists来判断文件是否存在,首先,必须先引用它!单击“工程→引用”,在列表框中找到“Microsoft scripting runtime”并复选它,单击确定,然后,在窗体Form1声明部分添加代码:
  ?牐牐б眯驴丶道?
  ?牐燚im Fso AS New FileSystemObject
  ?牐犗衷冢搅斯丶糠郑颐且煌5嘏卸献⒉岜碇惺欠裼行畔ⅲ鱰imer1,输入如下代码:
  ?牐燬ub Timer1_timer()??
  ?牐燚im com As String
  ?牐燾om = GetSetting(App.EXEName,"参数信息","command",Default)
  ?牐牐Щ袢∽⒉岜碇械闹?
  ?牐營f Fso.FileExists(com) = True Then
  ?牐牐?如果键值所指文件存在
  ?牐燤e.Picture = LoadPicture(com)
  ?牐牐?添加处理代码,假如是一幅图片
  ?牐燬aveSetting App.EXEName,"参数信息", "command",""
  ?牐牐Щ袢『罅⒖谈蹈晨找苑乐顾姥?
  ?牐燛nd If
  ?牐燛nd Sub
  ?牐牬蠊Ω娉桑砸皇裕厮』故悄蔷浠埃灰约有薷模隳艽?理声音、文本。
  ?牐犚陨洗朐赪indows 98、Visual Basic 6.0下调试通过。
  ?牐?