防止程序重复运行

防止程序重复运行,第1张

Private

Sub

Form_Load()

If

App.PrevInstance

=

True

Then

MsgBox

"该程序已经运行。",

vbInformation

End

End

If

End

Sub

由于WINDOWS的多任务处理功能,

有些程序可能打开后忘记了,下次用时还可能再打开,这样做会占用系统资源降低系统效率。为了防止自身被多次运行,可利用VB应用对象提供的PrevInstance属性来检测内存中是否已有一个自身的副本,若有则给出提示后结束。一般将检测代码放在FORM_LOAD()中,因为程序一运行就要检测,一旦有实例运行了它的返回值就是True,也就表明前面至少已经有一个实例在运行.

Vbinformation

:

d出信息对话框,是对话框的一种类型,包括的信息就是"该程序已经运行。"^_^

建立一个共享内存

在内存内

timer

控件刷新时间,

或这建立一个文件

比如

c:\xxx.txt

来写入数据

其他

exe

运行的时候调用同一个来判断是否已经运行,

再就是读

进程的方法你的程序进程名字肯定都一样,有重复的就不运行就好了。

在 delphi 中防止程序多次运行,有多种办法:

1、通过查找是否存在同名窗口的方式来防止,示例代码如下:

Var Hwnd:Thandle

Begin

 Hwnd:=FindWindow(‘窗口类名称’,‘窗口标题’)

 If Hwnd=0 then

 Begin

 Application.Initialize

 Application.CreateForm(Tform1, Form1)

 Application.Run

 End

End

2、使用互斥对象,示例代码如下:

 var

   mymutex: THandle

 begin

   mymutex:=CreateMutex(nil,True,'MyMutx')

   if GetLastError<>ERROR_ALREADY_EXISTS then

   begin

     Application.Initialize

     Application.CreateForm(TForm1, Form1)

     Application.Run

   end

   else

     showmessage('程序已经运行')

 end.

3、使用全局原子,示例代码如下:

 const

   myatom='myatom'

 begin

   if GlobalFindAtom(myatom)=0 then

   begin

     GlobalAddAtom(myatom)

     Application.Initialize

     Application.CreateForm(TForm1, Form1)

     Application.Run

     GlobalDeleteAtom(GlobalFindAtom(myatom))

   end

   else

     showmessage('程序已运行')

 end.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11288534.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存