Как не допустить запуск второй копии программы
ОГЛАВЛЕНИЕ
Решение 1
В блоке begin..end модуля .dpr:
begin
Реализация в модуле:
unit PrevInst;
interface
uses
type
PHWnd = ^HWnd;
function EnumApps(Wnd: HWnd; TargetWindow: PHWnd): bool; export;
procedure ActivatePreviousInstance;
implementation
function EnumApps(Wnd: HWnd; TargetWindow: PHWnd): bool;
var
procedure ActivatePreviousInstance;
var
end.
Решение 2
Предоставленное разработчиками Delphi 2 Пачекой (Pacheco) и Тайхайрой (Teixeira) и значительно переработанное.
unit multinst;
{
interface
uses Forms, Windows, Dialogs, SysUtils;
const
{ Проверка правильности запуска приложения с помощью описанных ниже функций. }
{ Количество флагов ошибок MI_* может быть более одного. }
function GetMIError: Integer;
Function InitInstance : Boolean;
implementation
const
var
function GetMIError: Integer;
begin
function NewWndProc(Handle: HWND; Msg: Integer; wParam,
{ Если это - сообщение о регистрации... }
procedure SubClassApplication;
begin
procedure DoFirstInstance;
begin
procedure BroadcastFocusMessage;
{ Процедура вызывается, если уже имеется запущенная копия Вашей программы. }
var
{ Не показываем основную форму }
Function InitInstance : Boolean;
begin
initialization
begin
finalization
begin
end.
Решение 3
face="Courier New" size="2"> VAR MutexHandle:THandle;
Var UniqueKey : string;
FUNCTION IsNextInstance:BOOLEAN;
BEGIN
begin
В MainForm вам необходимо вставить обработчик внутреннего сообщения
PROCEDURE TMainForm.OnAppMessage( VAR M:TMSG; VAR Ret:BOOLEAN );BEGIN
INITIALIZATION