Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Исключение повторного запуска проги 
:(
    Опции темы
TP@MB@Y
Дата 25.6.2005, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 18.12.2004
Где: Москва

Репутация: нет
Всего: 4



У многих прог такая вещь реализована, т.е. нельзя запустить программу несколько раз если она уже запущена. Хочу у своих прог тоже так делать.

Вот что я пытаюсь изобразить:
Код

procedure TfMain.FormCreate(Sender: TObject);
begin
 if findwindow(nil,'Project1.exe')<>0 then close
end;


Но прога всеравно запускается повторно.
PM   Вверх
_hunter
Дата 25.6.2005, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



а ты уверен что окно именно так называется? запусти WinSight и посмотри


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Poseidon
Дата 25.6.2005, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Код
program Project1;

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

{$R *.res}

function Check: boolean;
var
  HM: THandle;
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(TForm1, Form1);
  Application.Run;
end.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Quadr0
Дата 25.6.2005, 18:51 (ссылка)    |    (голосов: 2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 14.7.2011, 22:22
  Вверх
Quadr0
Дата 25.6.2005, 19:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 14.7.2011, 22:22
  Вверх
Albinos_x
Дата 25.6.2005, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 3
Всего: 108



я пользуюсь таким вариантом:

Код

var
  Form1: TForm1;
  CheckEvent:TEvent;
 

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
CheckEvent:=TEvent.Create(nil,false,true,'MYPROGRAM_CHECKEXIST');
IF CheckEvent.WaitFor(10)<>wrSignaled then
   begin
   Application.Terminate;
   end;
end;
...



--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
jack128_
Дата 26.6.2005, 11:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Quadr0
Цитата(Quadr0 @ 25.6.2005, 18:51)
begin
  if hPrevInst then
  begin
    ShowMessage('Program is already running!');
    Halt;
  end

Застрял в Win16? ;)
Подъитоживая все предложенные методы: создаешь именнованный объект ядра. Если в процессе создания выледзла ошибка ERROR_ALREADY_EXISTS (объект с заданным именем уже существует) то завершаешь программу. Имя объекта должно быть уникальным, так чтот лудше использовать для именнования guid'ы
  Вверх
TP@MB@Y
Дата 26.6.2005, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 18.12.2004
Где: Москва

Репутация: нет
Всего: 4



Всем спасибо. Принцип понятен smile
PM   Вверх
h2o
Дата 2.9.2005, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: нет
Всего: 1



Нужно зделать Семафор! Простая структура+делает всё что тебе нужно!
Добавлено @ 15:37
в FormCreate пропиши
Код

CreateSemaphore(nil,0,1,'1C db PackIT!Mon');
        {Cоздаём семафор и проверяем, не возникла ли при этом ошибка.
         Если возникла - значит, такой семафор уже существует, то есть уже есть
         запущенный экземпляр программы.}
     if GetLastError=Error_Already_Exists then
      begin
       MessageDlg('Приложение уже запущено!',mterror, [mbok], 0);
       Application.Terminate;
      end;

Добавлено @ 15:39
'1C db PackIT!Mon' - это любое слово, например название твоей проги. если у тебя несколько прог, вписывай разные слова, а то одна не даст другую запустить!
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
offline
Дата 2.9.2005, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: нет
Всего: 7



Я делаю как сказал Poseidon но еще добавляю сообщение, что программа уже запущена, работает 100%, но есть одна фигня, это то, что управление не передается уже запущенной программе smile Было бы хорошо, показать сообщение, а потом перейти к запущенному экземпляру программы.
PM MAIL   Вверх
_hunter
Дата 2.9.2005, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



для этого можеш посылать ей какое-нить сообщение ( WM_USER + N ) можеш event назначить...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
dvamaster
Дата 2.9.2005, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: 2
Всего: 10



Есть еще Atom, можно при запуске поги проверять его наличие, затем, если не найден, создавать его, а при выходе убивать!

smile


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 5.9.2005, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Атом можно использовать , только одна трабла, при зависании процесса и последующем его гроханье через таскманагер, процесс более запустить не удастся smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
dvamaster
Дата 6.9.2005, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: 2
Всего: 10



Romikgy, ты прав, чего-то я про это не подумал


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
Angel_19
Дата 22.9.2005, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 5.4.2005

Репутация: нет
Всего: нет



В наборе RX есть для этого функция. Работает отлично ...
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0577 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.