Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 11.10.2009, 17:13   #1
Vol666
Гуру Разврата
Форумчанин
 
Аватар для Vol666
 
Регистрация: 29.07.2009
Сообщений: 373
По умолчанию Проверка запущена ли ещё одна копия приложения

Есть у кого-нибудь решение данной проблемы? Решать это двумя программами нельзя.
Фредди вернулся))) И Готов Убивать!!!
Vol666 вне форума Ответить с цитированием
Старый 11.10.2009, 17:14   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Ищите хендл с классом и заголовком Вашего окна - не найдете - копия одна, найдете - кильните его.

Можно еще так:
Код:
program Project1;

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

{$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
begin
  ShowMessage('Извините, но одна из копий программы уже запущена.');
  exit;
end;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 11.10.2009 в 17:17.
Alex Cones вне форума Ответить с цитированием
Старый 11.10.2009, 17:20   #3
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

delphiworld
Код:
uses
  SysUtils, WinTypes, WinProcs, WinCrt;
..............................................
var
  NumInstances, SavePrevInst: word;
......................................................
procedure GetInstanceData(hInst, Offset, Size: Word); far; external 'KERNEL';
begin
  SavePrevInst := hPrevInst;
  NumInstances := 0;
  while hPrevInst <> 0 do
  begin
    GetInstanceData(hPrevInst, Ofs(hPrevInst), SizeOf(hPrevInst));
    Inc(NumInstances);
  end;
  Writeln('Уже запущено ', NumInstances, ' копий программы');
  hPrevInst := SavePrevInst;
end.
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 11.10.2009, 19:01   #4
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Цитата:
delphiworld
...
GetInstanceData
Что ещё раз доказывает, что delphiworld - сборник, извиняюсь, быдлокода.
пыщь
JTG вне форума Ответить с цитированием
Старый 11.10.2009, 19:19   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

почему забыли про - GlobalAddAtom? в проекте формы...
Код:
var PIWin : hWnd;
    AtomFN: WParam;
begin
  //антизапуск 2-копии
  PIWin := FindWindow(WINDOWCLASSNAME, NIL);
  if PIWin <> 0 then
    begin
     if Paramcount = 0 then halt;
     AtomFN := GlobalAddAtom(pChar(paramstr(1)));
     PostMessage(PIWin, CM_OPENFILE, AtomFN, 0);
     halt;
    end;
  //Run program
  Application.Initialize;
  ...
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 11.10.2009, 23:20   #6
andreibtzt
Заблокирован
 
Регистрация: 04.04.2009
Сообщений: 43
По умолчанию

Код:
procedure TForm1.FormCreate(Sender: TObject);
Var ExtEndedStyle:dword;
Wnd : hWnd;
buff : Array[0.. 127] of Char;
Begin
Wnd := GetWindow(Handle, gw_HWndFirst);
While Wnd <> 0
DO
Begin
If (Wnd <> Application.Handle)
and (GetWindow(Wnd, gw_Owner) = 0) Then
Begin GetWindowText (Wnd, buff, sizeof (buff ));
If StrPas (buff) = Application.Title Then
Begin
showmessage('....');
Halt;
End;
End;
Wnd := GetWindow (Wnd, gw_hWndNext);
End;
End;
andreibtzt вне форума Ответить с цитированием
Старый 11.10.2009, 23:38   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
AtomFN := GlobalAddAtom(pChar(paramstr(1)));
А если запустить из другой директории?

эмм.. 1 это вроде уже доп. параметр, 0 - путь к программе, судя по коду там 0 должен быть, или я не так понял?

Последний раз редактировалось mutabor; 11.10.2009 в 23:40.
mutabor вне форума Ответить с цитированием
Старый 11.10.2009, 23:56   #8
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Можно ещё с помощью мьютекса это сделать. Только не в .pas файлах, а в главном проекте .dpr:

Код:
// ...

var
  H, hMutex : THandle;

{
  -- Мьютекс для блокировки копии второй программы
  -- При попытке запуска второй копии - переключение на существующую
}

begin
  hMutex := CreateMutex(nil, False, 'OneCopyMutex');
  H := FindWindow('TMainFormGUI', nil);
  if WaitForSingleObject(hMutex, 0) <> Wait_TimeOut then begin
      Application.Initialize;
      Application.CreateForm(TMainFormGUI, MainFormGUI);
      Application.CreateForm(TAboutBox, AboutBox);
      Application.CreateForm(TPlagInForm, PlagInForm);
      Application.CreateForm(TInspectForm, InspectForm);
      // ...
      Application.Run;
  end else begin
      SetForegroundWindow(H);
      exitprocess(0);
  end;
end.
BaronTreep вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ещё одна проблема с программой на Си osichev Помощь студентам 1 07.06.2009 20:40
и ещё одна задачка...9 слонов MiH@N Помощь студентам 4 23.06.2008 23:03
Вот ещё одна,самая сложная: felice Паскаль, Turbo Pascal, PascalABC.NET 4 03.02.2008 17:21


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS