《计算机世界》报1997年5月26日的第255版和6月30日第189版先后发表了顾岱鸿和张新宇的文章讨论了“防止应用程序两次加载”的问题,由于这是一个非常实际的问题,有必要再作一些说明。两篇文章采用的方法都是利用Windows
API的函数GetModuleHandle和GetModuleUsage,实际上有更为简单的做法。VB有一个App对象,它有一个PrevInstance属性,如果应用程序已经被加载了一次,该属性返回True,否则返回False。熟悉C语言Windows编程的读者可能会意识到这实际上是C语言中WinMain函数的hPrevInstance参数。利用这一参数我们可以将启动程序进行如下简化:
Sub Main() On Error GoTo errMain If App.PrevInstance Then MsgBox "Demo程序已经加载!", 64 ………… End Sub
同前两篇文章中介绍的方法相比,这种方法避免了调用Windows API时繁琐的声明语句,可以用于VB 3.0以上的各个版本,对于16位和32位版本均适用,而且可以减少因为调用Windows
API不慎而引发GPF错误的可能。
App对象是VB的内建对象,用户可以在程序的任何地方使用而无须事先声明。但可能是由于App对象多用于比较高级的设计问题,一般的书籍都未提及,因而很多人对此感到陌生,在此想作一简单的介绍。App对象有很多有用的属性:
属性 | 用途 |
EXEName | 应用程序(.EXE)的文件名,不包括扩展名和路径。主要用于某些Windows API的调用。该属性只能读,不能写。 |
HelpFile | 程序帮助文件(.HLP)的文件名,包括扩展名和路径。利用该属性和控制的HelpContextID属性可以实现上下文敏感的在线帮助。该属性可以读写。 |
Path | 应用程序所在目录的绝对路径(包括驱动器)。该属性用途最为广泛。该属性只能读,不能写。 |
Title | 出现在Windows 3.x的任务管理器和Windows 95的任务条上的程序名,最长40个字符。该属性可以读写。 |
读者可以利用以上属性编写自己的应用程序。
如果您有任何建议,请给我发电子邮件:
。
版权所有 李海,热情软件屋 1997-2006