Programın 1 tane çalışması..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Sawyer
Üye
Mesajlar: 29
Kayıt: 05 May 2009 11:30

Programın 1 tane çalışması..

Mesaj gönderen Sawyer »

Arkadaşlar ben programımdan 1 tane çalışmasını istiyorum yani çalıştığı anda tekrar çift tıkladığımızda zaten çalışıyor demesini istiyorum.

Createmutex ile yaptım ancak mesala bilgisayarımda 2 tane kullanıcı var bunu kapatmadan kullanıcı değiştir ile diğer oturuma girip programımı çalıştırabiliyorum. Bunu nasıl engellerim?

Yardımlarınız için teşekkürler.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Programın 1 tane çalışması..

Mesaj gönderen conari »

Ana form create de

Kod: Tümünü seç

var   Sem: THandle;
begin
    Sem := CreateSemaphore(nil, 0, 1, 'PROGRAM_NAME');
   if ((Sem <> 0) and (GetLastError = ERROR_ALREADY_EXISTS)) then
   begin
    CloseHandle(Sem);
  ShowMessage('Program şu an da çalışıyor, Kontrol ediniz..');
Halt;
  end;
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Sawyer
Üye
Mesajlar: 29
Kayıt: 05 May 2009 11:30

Re: Programın 1 tane çalışması..

Mesaj gönderen Sawyer »

yok kardeş aynı oturumdan deneyince çalışıyorda, burdaki oturumu kapatmadan başka oturuma geçiyorum yani başka kullanıcıya geçiyorum açılıyor sorunsuz. :(
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Programın 1 tane çalışması..

Mesaj gönderen Lost Soul »

oturumlar birbirinden bağımsız çalışır. bir oturumdan diğerine müdahle edemeyeceğiniz için bunu da engellemeyezsiniz diye düşünüyorum.
Sawyer
Üye
Mesajlar: 29
Kayıt: 05 May 2009 11:30

Re: Programın 1 tane çalışması..

Mesaj gönderen Sawyer »

yapanı gördüm + ilave olarak process explorer diye bir program var onunla bütün oturumlarda çalışan programları listeliyor. buda demek oluyorki müdahaleden fazlası yapılıyor.

Yardımlarınızı bekliyorum...
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Programın 1 tane çalışması..

Mesaj gönderen conari »

Task Manegar da gösteriyor.
Buradan belki Kill edersiniz öncekini.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
quadr
Üye
Mesajlar: 69
Kayıt: 21 Haz 2003 10:12
İletişim:

Re: Programın 1 tane çalışması..

Mesaj gönderen quadr »

çalışan processleri tara aynı isimde çalışan process var ise terminate et.

Kod: Tümünü seç

var
  ExeName: string;
  MyHandle: Thandle;
  Struct: TProcessEntry32;
begin
 ExeName := 'Program exe ismi';
  MyHandle := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  Struct.dwSize := Sizeof(TProcessEntry32);
  while Process32Next(Myhandle, Struct) do
  begin
    if AnsiContainsStr(UpperCase(Struct.szExeFile), UpeerCase(ExeName)) = true then //Exe ismine bakalım
    begin
       ShowMessage('Program açık durumda');
       ExitProcess(0);
       Break;   
    end;

  end;

kolay gelsin...

Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...

http://www.tcct.us
Sawyer
Üye
Mesajlar: 29
Kayıt: 05 May 2009 11:30

Re: Programın 1 tane çalışması..

Mesaj gönderen Sawyer »

Teşekkür ederim.. Kodu şu şekilde düzenledim ve sorunsuz çalışıyor çok sağol.

Kod: Tümünü seç

var
  ExeName: string;
  MyHandle: Thandle;
  Struct: TProcessEntry32;
  kopek:integer;
begin
kopek:=0;
ExeName := 'Project1.exe';

  MyHandle := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  Struct.dwSize := Sizeof(TProcessEntry32);

  while Process32Next(Myhandle, Struct) do


  begin

    if  AnsiContainsStr(UpperCase(Struct.szExeFile), UpperCase(ExeName)) = true then //Exe ismine bakalım

    begin
         kopek:=kopek+1;
         if kopek > 1 then begin
       ShowMessage('Program açık durumda');
       ExitProcess(0);
       Break;
       end;
    end;
    end;
Kullanıcı avatarı
quadr
Üye
Mesajlar: 69
Kayıt: 21 Haz 2003 10:12
İletişim:

Re: Programın 1 tane çalışması..

Mesaj gönderen quadr »

sora sora bağdat bulunur misali sora sora bitirecen programı. :D

Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...

http://www.tcct.us
askarad
Üye
Mesajlar: 65
Kayıt: 02 Eki 2007 03:47

Re: Programın 1 tane çalışması..

Mesaj gönderen askarad »

USES kısmına eklenenmesi gereken bir sınıf var mı?
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Programın 1 tane çalışması..

Mesaj gönderen sabanakman »

uses TlHelp32, StrUtils;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

Re: Programın 1 tane çalışması..

Mesaj gönderen Shou »

Merhabalar bu kodları kullanıyorumda şimdi burada bir açık var adam exe ismini değişip açabiliyor program oto exe ismini kontrol etsin yapamazmıyız?
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Re: Programın 1 tane çalışması..

Mesaj gönderen ALUCARD »

o zaman exenin ismini manuel yazmak yerine

Kod: Tümünü seç

ExtractFileName(Application.ExeName)
komutu ile al ve değişkene ata
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

Re: Programın 1 tane çalışması..

Mesaj gönderen Shou »

Kod: Tümünü seç

var
  ExeName: string;
  MyHandle: Thandle;
  Struct: TProcessEntry32;
  kopek:integer;
begin
kopek:=0;
ExeName := 'Project1.exe';

  MyHandle := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  Struct.dwSize := Sizeof(TProcessEntry32);

  while Process32Next(Myhandle, Struct) do


  begin

    if  AnsiContainsStr(UpperCase(Struct.szExeFile), UpperCase(ExeName)) = true then //Exe ismine bakalım

    begin
         kopek:=kopek+1;
         if kopek > 1 then begin
       ShowMessage('Program açık durumda');
       ExitProcess(0);
       Break;
       end;
    end;
    end;
ne dediğinizi anlamadımda burada örnek gösterirmisiniz?
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Programın 1 tane çalışması..

Mesaj gönderen sabanakman »

İp ucu..:

Kod: Tümünü seç

ExeName := 'Project1.exe';
satırına müdaheleniz yeterli olacaktır..
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla