Zamanlı exe çalıştırmak
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Zamanlı exe çalıştırmak
Hazırladığım programda kullanıcım şunu istedi benden. 02 Şubatta "kumasPik.exe" dosyasının çalışmasını istedi. Tıkandım kaldım nasıl yapacağıma dairen ufak fikrim yok, Timer bileşenini bu anlamda nasıl kullanacağımı bilmiyorum, Yardımlarınız için teşekkür ederim.
Bu muazzam programın içinde ben neyim?, sadece bir label..
kardeş tam olarak bilmiyorum ama bir fikrim geldi! exe yi registere kaydetsen daha sonrada senin belirliyeceğin tarihle exe çalışsa olmazmı arka planda, forumda ben gezerken görmüştün windows apileri diye bir başlıkta orda exe nasıl registere kaydetceğini yazıyosu bir bak istersen işine yaraya bilir... hatta şimdi ben buldum windows her açıldığında çalışsın diyor isen exe tarih kontrol edecek şekilde düzen le sonra alttaki kodla registere kaydet
[/code]
Kod: Tümünü seç
uses kısmına Registry unitini ekleyin.
{$IFNDEF WIN32}
const MAX_PATH = 144;
{$ENDIF}
procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.LazyWrite := false;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',false);
reg.WriteString('Uygulamam', uygulamanızın_yolu_ve_adı);
reg.CloseKey;
reg.free;
end;
@baypipox doğru yaklaşımda bulunarak hazırladığın tetikçi
programın her daim Windows açılışında çalıştırılması için gerekli kodu yazmış.
@Hakan Can da sana tmer ile nasıl kontrol edeceğini yazmış.
- Ben ise @Hakan Can'ın kodunda minik bir müdahale yapıcam. Çünkü tarih kontrollerinde eşitlik 1 saniyenin 1000'de birinde rastlanır. Şaka yapmıyorum bu gerçek.
Bu nedenle > veya < gibi büyüklük küçüklük kontrolü yapılır.
- Eşitlik durumunda hiç tetiklenememe ihtimalinin yanında bu bahsettiğim yeni durumda da program her çalıştığında; tarih büyüklük veya küçüklük kontrolüne yakalanıp gereksiz tetiklenme ihtimali doğar. Bu olumsuzluğu ise basit bir INI dosyası ile çözebilirsin.
- Bir de BONUS kontrol edeceğin tarihi de INI dosyasında tutar, OnCreate olayında global bir tarih değişkene alır o değişkeni kontrol ettirerek dinamizm atabilirsin.
- Örnek kodda, INI dosyası yoksa veya TETIK isimli anahtar yoksa varsayılan olarak TRUE kabul edilir ve zamanı geklince çalıştırılır.
- Çalıştıktan sonra INI dosyasına FALSE değeri yazılır. Bir sonraki kontrolde bu değer FALSE okunacağından yanlışlıkla mükerrer çalışma engellenir.
- Başarılar...

@Hakan Can da sana tmer ile nasıl kontrol edeceğini yazmış.
- Ben ise @Hakan Can'ın kodunda minik bir müdahale yapıcam. Çünkü tarih kontrollerinde eşitlik 1 saniyenin 1000'de birinde rastlanır. Şaka yapmıyorum bu gerçek.


- Eşitlik durumunda hiç tetiklenememe ihtimalinin yanında bu bahsettiğim yeni durumda da program her çalıştığında; tarih büyüklük veya küçüklük kontrolüne yakalanıp gereksiz tetiklenme ihtimali doğar. Bu olumsuzluğu ise basit bir INI dosyası ile çözebilirsin.
- Bir de BONUS kontrol edeceğin tarihi de INI dosyasında tutar, OnCreate olayında global bir tarih değişkene alır o değişkeni kontrol ettirerek dinamizm atabilirsin.
- Örnek kodda, INI dosyası yoksa veya TETIK isimli anahtar yoksa varsayılan olarak TRUE kabul edilir ve zamanı geklince çalıştırılır.
- Çalıştıktan sonra INI dosyasına FALSE değeri yazılır. Bir sonraki kontrolde bu değer FALSE okunacağından yanlışlıkla mükerrer çalışma engellenir.
Kod: Tümünü seç
// Uses INIFiles
procedure TForm1.Timer1Timer(Sender: TObject);
Var
INI : TINIFile;
begin
if Date > EncodeDate(2007, 2, 1) then
begin
INI := TINIFile.Create(ChangeFileExt(Application.ExeName, '.INI'));
If INI.ReadBool('TETIK', 'CALISTIR', True ) then begin
TTimer(Sender).Enabled := FALSE;
WinExec('C:\Kumaspik.exe', SW_SHOW);
INI.WriteBool('TETIK', 'CALISTIR', False );
end;
INI.Free;
end;
end;
En son mrmarman tarafından 27 Oca 2007 12:35 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
@Hakan Can
- Gözümden kaçan bişey yok, delphi help'e bakarsanız siz DATE demiş olabilirsiniz eşitliğin bir değil iki tarafı vardır.
EncodeDate fonksiyonu TDateTime tipinde döner.
- Bu örnek için çalışmaz demiyorum zaten hatalı şeklinde de bir ifadem olmadı. Sadece tarih eşitliklerinde eşitlik tarzından kaçınmanızı önerdim. Bunu sana da öneriyorum.
- ve evet eşitliğe odaklanınca büyük dediğimdeki 2 şubat yerine 1 demem gerekiyordu bu gözümden kaçmış..
- Gözümden kaçan bişey yok, delphi help'e bakarsanız siz DATE demiş olabilirsiniz eşitliğin bir değil iki tarafı vardır.

- Bu örnek için çalışmaz demiyorum zaten hatalı şeklinde de bir ifadem olmadı. Sadece tarih eşitliklerinde eşitlik tarzından kaçınmanızı önerdim. Bunu sana da öneriyorum.

- ve evet eşitliğe odaklanınca büyük dediğimdeki 2 şubat yerine 1 demem gerekiyordu bu gözümden kaçmış..
ENCODEDATE ile DATE sonuçta ikisi de aynı tipteler. İkisi de saat bilgisi döndürmüyorlar. Yani tamsayı döndürüyorlar (Double fakat küsüratı yok).
Ben daha ziyade bunu vurgulamak istemiştim.
Tabi birde verdiğin örnekte sonuç bir sonraki güne denk geliyordu. Onu düzeltmek amacıyla da söylemiştim.
Yoksa verdiğin bilgiler gerçekten yazılımcıların başını devamlı ağrıtan bilgilerin tashihi şeklinde çok değerli bilgiler.
Eleştiri olarak algılamayın.
İyi çalışmalar.
Ben daha ziyade bunu vurgulamak istemiştim.
Tabi birde verdiğin örnekte sonuç bir sonraki güne denk geliyordu. Onu düzeltmek amacıyla da söylemiştim.
Yoksa verdiğin bilgiler gerçekten yazılımcıların başını devamlı ağrıtan bilgilerin tashihi şeklinde çok değerli bilgiler.
Eleştiri olarak algılamayın.
İyi çalışmalar.
yaa arkadaş yeni bir konu açmadım benim merak ettiği birşey varda firebird de gbak ile backup aldırdıktan sonra direk oluşan gbk dosyasının tekrar ReStore yapmak istiyorum bunun için de programdan o dosyanı oraya oluşup oluşmadığını bilmem lazım yani yazağım kod misal backup yaptıktan sonra
" c:\yedek\tamer.gbk " oluşturuluyor.
oluşmuşmu diye bakacak bunu nasıl yapabilirim.
ilgilenenlere çok tşkr ederim kolay gelsin.
" c:\yedek\tamer.gbk " oluşturuluyor.
oluşmuşmu diye bakacak bunu nasıl yapabilirim.
ilgilenenlere çok tşkr ederim kolay gelsin.
FileExists() fonksiyonu bu işi yapıyor. Yan var mı yok mu
Kod: Tümünü seç
If FileExists('c:\yedek\tamer.gbk') then ShowMessage('Dosya Var') else ShowMessage('YOK');
-
- Üye
- Mesajlar: 38
- Kayıt: 27 Ara 2006 03:13
Eğer sorunuzu yanlış anladıysam Fileexist fonksiyonu ile yapabilirsiniz. Geçenlerde bende sormuştım aynı soruyubaypipox yazdı:yaa arkadaş yeni bir konu açmadım benim merak ettiği birşey varda firebird de gbak ile backup aldırdıktan sonra direk oluşan gbk dosyasının tekrar ReStore yapmak istiyorum bunun için de programdan o dosyanı oraya oluşup oluşmadığını bilmem lazım yani yazağım kod misal backup yaptıktan sonra
" c:\yedek\tamer.gbk " oluşturuluyor.
oluşmuşmu diye bakacak bunu nasıl yapabilirim.
ilgilenenlere çok tşkr ederim kolay gelsin.
