Program aynı anda sadece bir tane çalışsın - Mutex

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Öncelikle programın doğru işlediğine dair -sadece kontrol için- araya şöyle bir mesaj ekle

- Yerini tespit edebilmen için IF bloğunun tamamını yazdım.

Kod: Tümünü seç

  if Calisiyor or (hMyMutex <> 0) then  // 2.kontrol.
  begin
    if IsIconic(hMyMutex) then
      ShowWindow(hMyMutex, SW_RESTORE);
    SetForegroundWindow(hMyMutex);
    ShowMessage('Program zaten çalışmaktadır.');
    Halt(0);
  end;
- Bu başlık altında bulunmasında fayda gördüğüm başka bir UNIT'i de refere etmek isterim..

Ref : http://delphi.about.com/library/code/ncaa100703a.htm
Bu ZIP dosyasını indirin, içindeki CheckPrevious.pas dosyasını proje klasörünüze kopyalayıp USES olarak (SHIFT+F11) projenize dahil edin.

- Bu UNIT'in özelliği; çalışmakta olan projenizi eğer varsa bulup açığa çıkarmak.

- Ek olarak beğendiğim diğer özelliği, dilerseniz 1'den büyük bir sayı belirliyorsunuz ve aynı anda programınız o sayıda adette çalışıyor. :idea:

- Ek başka bir özellik olarak da UNIT içerisinde MappingName'e vereceğiniz özel bir tarih, isim, saat vs. ile belli bir süre için programınızın tekrar çalışmasına mani olacak kontrol de ekleyebileceğiniz... :idea:

- Örnek tüm proje şağıdaki gibi sadeleşiyor...

Kod: Tümünü seç

program Project1;

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

{$R *.res}

begin
  // burada verilmiş olan rakam 1 (bir). 
  // Aynı anda sadece bir programınız çalışır. Bu rakam daha büyük 
  // verilirse, aynı anda o sayıda program çalışabiliyor.
  if not CheckPrevious.RestoreIfRunning(Application.Handle, 1) then
  begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
end.
Resim
Resim ....Resim
Cevapla