如何保存只有一个实例在运行 ( 积分: 50 )

  • 主题发起人 主题发起人 zceo
  • 开始时间 开始时间
Z

zceo

Unregistered / Unconfirmed
GUEST, unregistred user!
要保证一个实例在运行,这一点,在窗体不隐藏时可以实现,但是如果在第一个实例隐藏后,我想使用第二个实例将隐藏的第一个实例窗体显示出来,然后再关闭自已时(也就是关闭第二个窗体)第一个窗体会一闪而过,不知道是什么原因?<br>我所需要实现的功能如下:使用第二个实例将隐藏的第一个实例窗体显示出来,然后再关闭自已。不管第一个实例是显示,还是隐藏。即保证只有一个实例在运行。<br>procedure TForm1.FormCreate(Sender: TObject);<br>var<br> &nbsp;MutexHandle: Thandle;<br> &nbsp; h: HWND;<br>begin<br><br><br> &nbsp;Mutexhandle := windows.CreateMutex(nil, true, '电话机');<br> &nbsp;if Mutexhandle &lt;&gt; 0 then<br> &nbsp;begin<br> &nbsp; &nbsp;if getlasterror = windows.ERROR_ALREADY_EXISTS then<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;Application.MessageBox('本程序已有运行实例!', '启动提示!', 48);<br><br> &nbsp; &nbsp;h := FindWindow(nil, '电话机'); //把string转化成pchar<br> &nbsp; &nbsp;if h&lt;&gt;0 then<br> &nbsp; &nbsp; &nbsp;edit1.Text := inttostr(h);<br> &nbsp; &nbsp; &nbsp;ShowWindow(h,SW_SHOW);<br> &nbsp; &nbsp; &nbsp;Application.Terminate;<br> &nbsp; &nbsp;end;<br> &nbsp;end;<br><br>end;<br><br><br>//并不真正关闭程序,隐藏<br>procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);<br>begin<br> &nbsp;CanClose := False;<br> &nbsp;Hide;<br><br>end;
 
要保证一个实例在运行,这一点,在窗体不隐藏时可以实现,但是如果在第一个实例隐藏后,我想使用第二个实例将隐藏的第一个实例窗体显示出来,然后再关闭自已时(也就是关闭第二个窗体)第一个窗体会一闪而过,不知道是什么原因?<br>我所需要实现的功能如下:使用第二个实例将隐藏的第一个实例窗体显示出来,然后再关闭自已。不管第一个实例是显示,还是隐藏。即保证只有一个实例在运行。<br>procedure TForm1.FormCreate(Sender: TObject);<br>var<br> &nbsp;MutexHandle: Thandle;<br> &nbsp; h: HWND;<br>begin<br><br><br> &nbsp;Mutexhandle := windows.CreateMutex(nil, true, '电话机');<br> &nbsp;if Mutexhandle &lt;&gt; 0 then<br> &nbsp;begin<br> &nbsp; &nbsp;if getlasterror = windows.ERROR_ALREADY_EXISTS then<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;Application.MessageBox('本程序已有运行实例!', '启动提示!', 48);<br><br> &nbsp; &nbsp;h := FindWindow(nil, '电话机'); //把string转化成pchar<br> &nbsp; &nbsp;if h&lt;&gt;0 then<br> &nbsp; &nbsp; &nbsp;edit1.Text := inttostr(h);<br> &nbsp; &nbsp; &nbsp;ShowWindow(h,SW_SHOW);<br> &nbsp; &nbsp; &nbsp;Application.Terminate;<br> &nbsp; &nbsp;end;<br> &nbsp;end;<br><br>end;<br><br><br>//并不真正关闭程序,隐藏<br>procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);<br>begin<br> &nbsp;CanClose := False;<br> &nbsp;Hide;<br><br>end;
 
//引用 OnlyOne.pas即可(uses OnlyOne)<br>www.hitekersoft.com/download/OnlyOne.rar
 
后退
顶部