Aynı applicationdan ikinci bir tane açmamanın en iyi yolu?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Aynı applicationdan ikinci bir tane açmamanın en iyi yol

Mesaj gönderen mrmarman »

Ben şahsen şöyle bir ilüzyon uyguluyorum...
(1) Delphi IDE'de CTRL + SHIFT + G tuşuna basarsan sana bir GUID üretir onu kullanabilirsin. Şimdi ürettim ['{64DACF41-20EC-4ADE-9CB0-73F177DDE994}'] verdi.

(2) Anaform dışında ikinci bir form oluşturup bunun caption'una bu ismi veriyorum. (Formun görünür olması şart değil boş bir form sonuçta)
(3) Projenin DPR dosyasında önce FindWindow ile bu captiona sahip bir Handle var mı diye kontrol ediyorum.
(4) Varsa bunun application handleini foreground ediyorum


Bu kadar basit.

Örnek Hazırladım...

Kod: Tümünü seç

Var
  aHandle : HWND;
begin
  aHandle := FindWindow(Nil, PChar('{64DACF41-20EC-4ADE-9CB0-73F177DDE994}'));
  if aHandle <> 0 then
  begin
    MessageDlg('Yazılımı Halen Çalışmaktadır.', mtWarning, [mbOk], 0 );
    if IsIconic(aHandle)
      then ShowWindow(aHandle, SW_RESTORE)
    else if IsIconic(GetWindow(aHandle, GW_OWNER))
      then ShowWindow(GetWindow(aHandle, GW_OWNER), SW_RESTORE)
    else BringWindowToTop(aHandle);
  end else begin
    Application.Initialize;
    Application.MainFormOnTaskbar := True;
    Application.CreateForm(TForm1, Form1);
    Application.CreateForm(TForm2, Form2);
    Application.Run;
  end;
end.
Dosya ekleri
CalisanProgramimiziOneGetir.rar
Çalışan Programımızı Öne Getir
(189.77 KiB) 82 kere indirildi
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Aynı applicationdan ikinci bir tane açmamanın en iyi yol

Mesaj gönderen mrmarman »

- Zor bir metod gibi mi geldi ? Official olarak ne beklediğinize bağlı. :idea:

- GlobalAtom aslında bir anlamda official tanımınıza uyuyor. Yan etkisi var, şöyle ki proje normal dışı yollarla kapanırsa ayağınıza dolaşır. Halen çalışıyor olarak adledilir.

- Çalışmalarınızda başarılar.
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Aynı applicationdan ikinci bir tane açmamanın en iyi yol

Mesaj gönderen mrmarman »

- Yazdığınız kodları görmeden peşin konuşmuş olurum ama bu titizliğinizi kodlarınızda da gösteriyorsanız, zaten oldukça tasarruf etmiş olursunuz. Ölçme değerlendirme imkanınız varsa siz de göreceksiniz ki, bu kadarlık kayıp da üzerine düşünelecek değil ihmal edilecek seviyede emin olun. :idea:
Resim
Resim ....Resim
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: Aynı applicationdan ikinci bir tane açmamanın en iyi yol

Mesaj gönderen PROGRAMADOR »

mutex de kullanabilirsiniz.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: Aynı applicationdan ikinci bir tane açmamanın en iyi yol

Mesaj gönderen G.Arkas »

CreateMutex bu iş için en iyisi bence.

Kod: Tümünü seç

var
  Mutex : THandle;
begin
  Mutex := CreateMutex(nil, True, 'My_Unique_Application_Mutex_Name'); 
  if (Mutex = 0) OR (GetLastError = ERROR_ALREADY_EXISTS) then
  begin

    // code to searh for, and activate 
    // the previous (first) instance

  end
  else
  begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
    if Mutex <> 0 then
      CloseHandle(Mutex); 
    end;
  end;
Resim
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: Aynı applicationdan ikinci bir tane açmamanın en iyi yol

Mesaj gönderen G.Arkas »

Tabii ki de. Zaten bir Windows API dir kendisi.
Resim
Cevapla