Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Запрет на повторгый запуск программы. / 8 сообщений из 8, страница 1 из 1
25.10.2003, 01:27
    #32304997
Dmitry07
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на повторгый запуск программы.
Подскажите пожалуйста, как запретить программе запускаться, если эта программа уже открыта.
...
Рейтинг: 0 / 0
25.10.2003, 10:20
    #32305030
Andrei_A
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на повторгый запуск программы.
На прошлой неделе набрал в поисковике этот вопрос. Ответов просто туча - сразу готовый код - несколько вариантов. Просто скопируй и все.

Вот вроде что-то подобное

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
program Tree;

uses
  Forms,
  Windows,
  TreeDecl in 'TreeDecl.pas' {Base};

{$R *.RES}
var
 HM: THandle;

function Check: boolean;
begin
  HM := OpenMutex(MUTEX_ALL_ACCESS, false, 'MyOwnMutex');
  Result := (HM <>  0 );
  if HM =  0  then HM := CreateMutex(nil, false, 'MyOwnMutex');
end;


begin
  if Check then Exit;

  Application.Initialize;
  Application.CreateForm(TBase, Base);
  Application.Run;
end.
...
Рейтинг: 0 / 0
25.10.2003, 10:20
    #32305031
Andrei_A
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на повторгый запуск программы.
На прошлой неделе набрал в поисковике этот вопрос. Ответов просто туча - сразу готовый код - несколько вариантов. Просто скопируй и все.

Вот вроде что-то подобное

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
program Tree;

uses
  Forms,
  Windows,
  TreeDecl in 'TreeDecl.pas' {Base};

{$R *.RES}
var
 HM: THandle;

function Check: boolean;
begin
  HM := OpenMutex(MUTEX_ALL_ACCESS, false, 'MyOwnMutex');
  Result := (HM <>  0 );
  if HM =  0  then HM := CreateMutex(nil, false, 'MyOwnMutex');
end;


begin
  if Check then Exit;

  Application.Initialize;
  Application.CreateForm(TBase, Base);
  Application.Run;
end.
...
Рейтинг: 0 / 0
27.10.2003, 08:27
    #32305587
Mongrel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на повторгый запуск программы.
program Payment;

uses
Windows,
Dialogs,
Forms,
Unit1 in 'Unit1.pas' {Form1},

{$R *.RES}

var UniqeMapping : THandle;

begin
UniqeMapping := CreateFileMapping($ffffffff, nil, Page_ReadOnly, 0, 32, 'MyPayment');
if UniqeMapping = 0 then
begin
ShowMessage('Ошибка выделения памяти!');
Halt;
end
else
if GetLastError = Error_Already_Exists then
begin
ShowMessage('Вторую копию программы запускать нельзя!');
Halt;
end;

Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
...
Рейтинг: 0 / 0
27.10.2003, 08:49
    #32305610
Mongrel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на повторгый запуск программы.
Я раньше, кстати, через FindWindow делал.
...
Рейтинг: 0 / 0
27.10.2003, 10:14
    #32305698
SmaLL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на повторгый запуск программы.
Говорят через FindWindow нежелательно делать
Рекомендуется делать через мьютексы
...
Рейтинг: 0 / 0
28.10.2003, 11:53
    #32307203
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на повторгый запуск программы.
Рекомендуется делать через мьютексы
А можно и через отображенный в память файл. Его можно использовать как общую память с другими процессами.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
program Prg;

uses
  Forms,
  Windows,
  SysUtils,
// ...

var FirstHandle: THandle;
     FirstWindow: THandle;
begin

  FirstHandle := CreateFileMapping($FFFFFFFF, nil, PAGE_READONLY,  0 ,  32 , 'Prg');
  if FirstHandle  =  0  then
    begin
      ShowMessage('Ошибка выделения памяти'+# 13 # 10 +SysErrorMessage(GetLastError));
      Halt;
    end
	else if GetLastError = ERROR_ALREADY_EXISTS then
		begin
			FirstWindow := FindWindowEx( 0 ,  0 , PChar(string(TFormMain.ClassName)), nil);  // получить окно предыдущей копии
			if FirstWindow <>  0  then
				SetForegroundWindow(FirstWindow);
        ShowWindow(FirstWindow, SW_MAXIMIZE);  // Переключить на это окно
			Halt;
		end;

  try
  	Application.Initialize;
	  Application.ShowMainForm := false;
  	Application.CreateForm(TFormMain, FormMain);
    Application.Run;
  finally
  end;
end.
...
Рейтинг: 0 / 0
29.10.2003, 17:48
    #32309474
Stepan_mk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на повторгый запуск программы.
Сделал как сказал Andrei_A

HM := OpenMutex(MUTEX_ALL_ACCESS, false, 'MyOwnMutex');

Result := (HM <> 0);
В любом случає у меня Hm = 0 Почему?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Запрет на повторгый запуск программы. / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]