delphi – 我如何知道我的程序的另一个实例是否已经运行?
发布时间:2020-12-15 10:19:42 所属栏目:大数据 来源:网络整理
导读:如何知道我的程序的一个实例是否正在运行? 我想我可以做一个数据文件,但它只是乱七八糟: 我想这样做,因为我只想要一个实例一次打开。 解决方法 你可以创建一个Semaphore …并停止执行(将代码放入你的* .dpr文件),让你运行的应用程序到屏幕上。 var Sema
如何知道我的程序的一个实例是否正在运行?
我想我可以做一个数据文件,但它只是乱七八糟: 我想这样做,因为我只想要一个实例一次打开。 解决方法
你可以创建一个Semaphore …并停止执行(将代码放入你的* .dpr文件),让你运行的应用程序到屏幕上。
var Semafor : THandle; begin // Don't start twice ... if already running bring this instance to front Semafor := CreateSemaphore(nil,1,'MY_APPLICATION_IS_RUNNING'); if ((Semafor <> 0) and // application is already running (GetLastError = ERROR_ALREADY_EXISTS)) then begin RestoreWindow('TMyApplication'); CloseHandle(Semafor); Halt; end; Application.CreateForm(....); Application.Initialize; Application.Run; CloseHandle(Semafor); end; EDIT(添加了RestoreWindow方法): aFormName是应用程序中您的主表单类的名称。 procedure RestoreWindow(aFormName : string); var Wnd,App : HWND; begin Wnd := FindWindow(PChar(aFormName),nil); if (Wnd <> 0) then begin // Set Window to foreground App := GetWindowLong(Wnd,GWL_HWNDPARENT); if IsIconic(App) then ShowWindow(App,SW_RESTORE); SetForegroundwindow(App); end; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |