Hesabına erişemeyen eski üyeler Discord üzerinden yardım alabilir.
Selamlar, bi sorunum var. Projem sadece 1 kere çalıştırılsın istiyorum. Projem açıkken 2.sini açmaya çalıştığım zaman zaten program çalışıyor hatasını almak istiyorum. Şimdiden yardım eden herkeze teşekkürler ..
Sizin istediğiniz gibi bir unit var isterseniz verebilirim. ?
çok memnun olurum
Dün pek online değildim cevap yazamadım üzgünüm şimdi yazıyorum.
 procedure TForm1.FormActivate(Sender: TObject);
begin
  hMyMutex := CreateMutex(nil,FALSE,'Deneme');
  if (hMyMutex <> 0) then try
    if (GetLastError <> ERROR_ALREADY_EXISTS) then begin
      Application.Initialize;
      Application.CreateForm(TForm1,Form1);
      Application.Run;
    end else ShowMessage ('Program zaten çalışıyor');
close;
  finally
    CloseHandle (hMyMutex);
  end else ShowMessage ('Program tanım oluşturmada hata : ' + IntToStr(GetLastError));
end;
hMyMutex hata veriyor :S
Delphi bilmediğini var sayarak, basit şekilde anlatmaya çalışayım. Üst menüden, sırasıyla Project + View Source'ye gir. Bu alanda projenin .dpr dosyasında yer alan ve program çalıştırıldığında, ilk işletilecek olan kodları göreceksin. Boş bir proje açmışsan, aşağı yukarı şöyle bir kod kümesi yer alacak;

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

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Burada uses kısmında, projenin kullanacağı kütüphaneler yer almaktadır. Öncelikle, projemizin başlık bilgilerini kontrol etmemizi sağlayacak olan Windows kütüphanesini, Forms'un altına ekle.
-----------------------------------
uses
Forms,
Windows,
Unit1 in 'Unit1.pas' {Form1};
-----------------------------------
Daha sonra, projenin görev yöneticisinde de tanımlanmasını sağlayacak olan, başlık bilgilerini belirtmen gerekiyor. Aksi taktirde, programı, aşağıda belirteceğim metotla tespit etmem mümkün olmayacak. Bunun içinde, programın yüklenmeye başladığı kısma (Application.Initialize;), başlık bilgilerini Application.Title şeklinde belirtmen gerekiyor. Örnek olarak programın başlığını ultimastrike yapalim.
-----------------------------------
Application.Initialize;
Application.Title := 'ultimastrike';
Application.MainFormOnTaskbar := True;
-----------------------------------
Son olarakta, programın başlığını bellek üzerinde kontrol edip, açık olup olmadığını tespit edeceğimiz ve açıksa çalışmasını engelleyeceğimiz (Halt(0);) kodu, program bilgileri yüklenmeye başlamadan, çalıştırıyoruz. Bunun içinde, aşağıda ki kodu eklemen gerekiyor.
-----------------------------------
{$R *.res}

begin
CreateMutex(nil,FALSE,'ultimastrike');
if GetLastError = ERROR_ALREADY_EXISTS then
begin
Halt(0);
end;


Application.Initialize;
-----------------------------------
Bu koduda eklediğimizde, kodun tamamı, aşağı-yukarı (kendi uygulamandaki formlar ve düzenlemelere göre değişebilir) bu şekilde görünecektir.
-----------------------------------
program Project1;

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

{$R *.res}

begin
CreateMutex(nil,FALSE,'ultimastrike');
if GetLastError = ERROR_ALREADY_EXISTS then
begin
Halt(0);
end;


Application.Initialize;
Application.Title := 'ultimastrike';
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
-----------------------------------
Artık, program birden fazla açılmayacak. Eğer program tekrar açılmaya çalışınca, uyarı görüntülemek istersen de, uses kısmına, Dialogs kütüphanesini ekledikten sonra, ShowMessage(); fonksiyonunu kullanabilirsin.
-----------------------------------
if GetLastError = ERROR_ALREADY_EXISTS then
begin
ShowMessage('Program zaten çalışıyor.');
Halt(0);
end;
-----------------------------------
Kolay gelsin...
Çok Teşekkür ediyorum KralMAS. Birde ;

if GetLastError = ERROR_ALREADY_EXISTS then
begin
ShowMessage('Program zaten çalışıyor.');
Halt(0);
end;

Bunu nereye ekleyebilriz ?

Bu konu yyyyyy tarafından düzenlendi(2010-01-11 23:52, 14 yıl önce)
if GetLastError = ERROR_ALREADY_EXISTS then
begin
Halt(0);
end;

olan kısmı

if GetLastError = ERROR_ALREADY_EXISTS then
begin
ShowMessage('Program zaten çalışıyor.');
Halt(0);
end;

olarak değiştireceksin sadece, yani Halt(0); (programı kapat) kısmından önce,
ShowMessage('Program zaten çalışıyor.');
satırını ekliyeceksin, okadar.
Tamamdır, Çok Sağol =)

birde https://www.ultima-strike.com/forum/yazilim/program-varsa-kapansin-de-q43770#bottom Bu konu hakkında bilgin varsa çok makbule geçer abi.

Üye Ol veya Giriş Yap

Bu forum başlığına mesaj atmak istiyorsanız hemen üye olun veya giriş yapın.