F
FreeFish
Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序里想避免同时运行该程序的多个例程(因为该程序含有一个闪<br>现窗口,我将防止运行多个例程的代码写在闪现窗口的OnCreate事件里)。<br>虽然这样也能够避免了多个例程同时运行,但每运行一次此程序,闪现<br>窗口也跟着出现。请问有什么好的办法可以避免这种现象的发生,即在<br>内存中没有运行此程序的情况下,闪现窗口正常出现;而在内存中已经<br>运行了该程序的情况下,闪现窗口不会出现。而无论在那种情况下,都<br>要保证整个系统只能有一个例程在运行。以上情况与"金山词霸2001"启<br>动时情况相似。请问各位高手能否有其它更好的办法实现?(附程序代码)<br><br>//以下为项目文件Project1<br><br>Uses<br> Forms,<br> Unit1 in 'Unit1.pas' {MainForm},<br> Unit2 in 'Unit2.pas' {SplashForm};<br><br>{$R*.RES}<br><br>begin<br><br> Application.Initialize;<br> SplashForm:=TSplashForm.Create(Application);<br> SplashForm.Show;<br> SplashForm.Update;<br> //SplashForm中放置了TTimer组件,其Enabled属性为True,<br> //其Interval属性为2500,其OnTimer事件代码<br> // 为:DelayTimer.Enabled:=False<br> While (SplashForm.DelayTimer.Enabled) do<br> Application.ProcessMessage;<br> Application.CreateForm(TMainForm,MainForm);<br> SplashForm.Hide;<br> SplashForm.Free;<br> Application.Run;<br><br>end.<br><br>//以下为单元文件Unit2<br><br>procedure TSplashForm.FormCreate(Sender:TObject);<br>var<br> S:string;<br> HOldWindow:HWND;<br> AppName:array[0..255] of char;<br>begin<br> S:=Application.Title;<br> StrpCopy(AppName,S);<br> Application.Title:='wjy'+inttostr(HInstance);<br> HOldWindow:=FindWindow(nil,AppName);<br> Application.Title:=S;<br> if HOldWindow<>0 then<br> begin<br> ShowWindow(HOldWindow,SW_Restore);<br> Application.Terminate; <br> end;<br>end;