Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2009, 07:21   #1
lesha_firs
Пользователь
 
Регистрация: 19.05.2009
Сообщений: 27
По умолчанию EXE

Как прописать в delphi что бы когда программа запущена второй раз запустить было нельзя и писал ошибку "программа запущена"
lesha_firs вне форума Ответить с цитированием
Старый 17.06.2009, 08:07   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Я бы с атомами поигрался. Например повесь такой код на onCreate формы
Код:
var
   atom: integer;
..............
  if GlobalFindAtom('This my SUPER PROGA!!!!!') = 0
  then atom := GlobalAddAtom('This my SUPER PROGA!!!!!')
  else Halt;
Но тут нужно отдавать себе отчет в том, что атом не уничтожится сам по выходу из программы. Его нужно уничтожить самостоятельно через GlobalDeleteAtom(atom). Если этого не сделать, то прога просто не запустится второй раз после ее закрытия. Предлагаю самому подумать, как здесь лучше сделать.
Баламут вне форума Ответить с цитированием
Старый 17.06.2009, 09:08   #3
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Вот хороший код
Код:
{$R *.res}
Var HM :THandle;

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

begin
    // Проверка на запуск второй копии программы
    If Check then
    exit;
  Application.Initialize;
  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
end.
FaTaL вне форума Ответить с цитированием
Старый 17.06.2009, 09:33   #4
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

в файле *.dpr

Код:
.......
var
  hwnd: THandle;
begin
  hwnd := FindWindow('TMainForm', 'Моя прога');
  if hwnd = 0 then
  begin
   Application.Initialize;
   Application.Title := 'Моя прога';
  Application.CreateForm(TMainForm, MainForm);
  Application.CreateForm(TEditForm, EditForm);
  Application.CreateForm(TPassEditForm, PassEditForm);
  Application.CreateForm(TDataModule1, DataModule1);
  Application.CreateForm(TEditFoneForm, EditFoneForm);
  Application.CreateForm(TEnterPassForm, EnterPassForm);
  Application.Run;
  end; //else.....сообщение

Последний раз редактировалось SERG1980; 17.06.2009 в 09:37.
SERG1980 вне форума Ответить с цитированием
Старый 17.06.2009, 11:05   #5
lesha_firs
Пользователь
 
Регистрация: 19.05.2009
Сообщений: 27
По умолчанию

Чето не чего не работает
lesha_firs вне форума Ответить с цитированием
Старый 17.06.2009, 11:11   #6
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Тогда используйте сторонние компоненты например LMD там есть такой
компонент
SERG1980 вне форума Ответить с цитированием
Старый 17.06.2009, 11:17   #7
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Код:
Procedure OnlyOne;
Var
HMutex: Integer;
Begin
HMutex:=CreateMutex(Nil, True, 'pro');
If GetLastError <> 0 Then
Begin
ShowMessage('Программа уже запущена!');
Halt;
End;
End;
Procedure TForm1.FormCreate(Sender: TObject);
Begin
OnlyOne;
End;
Немного добавлю к тому что написал SERG1980. Компонент называется LMDOneInstance.
Всегда рад помочь!

Последний раз редактировалось Terran; 17.06.2009 в 11:21.
Terran вне форума Ответить с цитированием
Старый 17.06.2009, 11:36   #8
lesha_firs
Пользователь
 
Регистрация: 19.05.2009
Сообщений: 27
По умолчанию

Код:
Procedure OnlyOne;
Var
HMutex: Integer;
Begin
HMutex:=CreateMutex(Nil, True, 'pro');
If GetLastError <> 0 Then
Begin
ShowMessage('Программа уже запущена!');
Halt;
End;
End;
Procedure TForm1.FormCreate(Sender: TObject);
Begin
OnlyOne;
End;
я делаю а он всеровно открывает заново проект

Последний раз редактировалось Stilet; 18.06.2009 в 12:11.
lesha_firs вне форума Ответить с цитированием
Старый 17.06.2009, 12:24   #9
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
Хорошо

Вы не хотите хоть какие-то усилия приложить чтобы программировать, вы хотите чтобы за вас всё сделали и разживали. В инете полно инфы об этом, вот:

http://www.google.com/search?q=%D0%B...ient=firefox-a
http://forum.ixbt.com/topic.cgi?id=40:682-2
http://narod.yandex.ru/cgi-bin/yandm...0=956889008&p=

Призываю модераторов закрыть эту тему, так-как этот уважаемый топик стартер будет засорять форум и тратить время других попусту.

p.s извиняюсь за флуд.
Crivel вне форума Ответить с цитированием
Старый 17.06.2009, 13:15   #10
lesha_firs
Пользователь
 
Регистрация: 19.05.2009
Сообщений: 27
По умолчанию

да ошибку он выдает но приложение всеровно открывает
Я пешу form1.close;
он игнарирует

все зднлал
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
CreateMutex(nil,false,'Project1.exe');
k := GetLastError();

if (k=ERROR_ALREADY_EXISTS)or(k=ERROR_ACCESS_DENIED) then
begin

 Application.Terminate;
 Exit;
end;

end;

Последний раз редактировалось Stilet; 18.06.2009 в 12:14.
lesha_firs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с .exe Randjar Свободное общение 7 29.03.2009 10:26
exe-файл max38934 PHP 3 08.03.2009 17:13
svchost.exe Anagramma Помощь студентам 1 08.03.2009 14:33
чтение из одного exe файла, и запись в другой exe inndim Общие вопросы Delphi 2 04.02.2009 15:23
cmd.exe UnD)eaD)Snake Общие вопросы Delphi 14 01.10.2008 06:45