Kullanılmadığı zamanda programı nasıl kapatabilirim..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
SieS
Üye
Mesajlar: 166
Kayıt: 17 Haz 2003 10:41
Konum: Konya

Kullanılmadığı zamanda programı nasıl kapatabilirim..

Mesaj gönderen SieS »

S.a.

Çalıştığım yerde yaklaşık 30 terminalde çalışan programım var, bazan kullancı arkadaşlar bilgisayarının başında olmayıp dışarıya çıkıyor, bu esnada bilgisayarı açık aynı zamanda programda açık kalabiliyor, bu durumda ben programın kendi kendini kapatmasını sağlamak istiyorum,
bilgisayar açık kalmaya devam etsin ama çalışan program kapansın istiyorum, timer ile bu iş yapmaya çalıştım ama beceremedim daha kolay bir yöntemi varmıdır.
Mesele program üzerinde 5 dk işlem yapılmamış ise kapansın olay bu.

Yardımcı olacak arkadaşlarıma şimdiden teşekkür ederim.
Allah razı olsun ...
Saygılar.
Ben Toprağın Sinesinde İnsan Denilen Bir Canım
Hem Düşünür, Hem Severim Budur Taştan Faklı Yanım.
Her maddenin zevlesini bedenimde taşıyorsam.
Ben ne bir taş ne bir ağaç, insanlığımla insanım.
ng
Üye
Mesajlar: 192
Kayıt: 01 Mar 2004 11:49
Konum: Bursa
İletişim:

Mesaj gönderen ng »

Aklıma gelen en kolay yol programa bir timer koyup intervalini (5 dk. için) 300 000 yapman. Bu arada onmousmove ve/veya onkeypress olaylarında timeri disable edip sonra yeniden enable etmen; bu şekilde her fare hareketinden yada her klavye vuruşundan sonra timer yeniden saymaya başlayacak. 5 dk boyunca hiç bir olay olmazsa timer 300 000'e ulaşacağı içinde ontimer olayında programı kapatabililrsin.
SieS
Üye
Mesajlar: 166
Kayıt: 17 Haz 2003 10:41
Konum: Konya

Mesaj gönderen SieS »

Bunu denedim, bütün formlara komut satırı eklemem gerekiyor.
Başka yöndem olabilirmi mesela makinanın ekran koruyucusunun ne zaman devreye girdiğini kontrol edebiliyormuyuz.
o şekilde olur sanıyorum.
Ben Toprağın Sinesinde İnsan Denilen Bir Canım
Hem Düşünür, Hem Severim Budur Taştan Faklı Yanım.
Her maddenin zevlesini bedenimde taşıyorsam.
Ben ne bir taş ne bir ağaç, insanlığımla insanım.
Kullanıcı avatarı
Z.D.
Üye
Mesajlar: 104
Kayıt: 01 Nis 2006 01:48
Konum: İstanbul

Mesaj gönderen Z.D. »

Bunun için windows apilerinden GetLastInputInfo fonksiyonu var. Formunuza koyacağınız bir Timer ile bu fonksiyonu çağırarak karşılaştırma yapabilirsiniz.

Kod: Tümünü seç

Unit Unit1;

Interface

Uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

Type
  TForm1 = Class(TForm)
    Timer1: TTimer;
    Procedure Timer1Timer(Sender: TObject);
  Private
    { Private declarations }
  Public
    { Public declarations }
  End;

Var
  Form1: TForm1;

Implementation

{$R *.dfm}


Function SecondsIdle: DWord;
Var
  liInfo: TLastInputInfo;
Begin
  liInfo.cbSize := SizeOf(TLastInputInfo);
  GetLastInputInfo(liInfo);
  Result := (GetTickCount - liInfo.dwTime) Div 1000;
End;

Procedure TForm1.Timer1Timer(Sender: TObject);
Begin
  Caption := Format('Kullanıcı etkileşimsizlik süresi %d saniye  -   (System IDLE last second)', [SecondsIdle]);
  If SecondsIdle >= 5 Then // Denemek icin 5 saniye verelim
    SendMessage(Handle, WM_CLOSE, 0, 0);
End;

End.

Kolay gelsin.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Teşekkürler, basit, sade ve güzel bir çözüm :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
iqprog

Mesaj gönderen iqprog »

Z.D. teşekkürler.

Bu olaya hiç ihtiyacım olmadı ama biraz vakit bulunca projeme bunu ekleyeceğim. Bazen kullanıcı burakıp gidiyor ve pc'de öyle açık kalıyo. Tabi başkası da gelip kullanabilir. Biz de o kadar kullanıcı yetkileri diye uğraşıyoruz. Bu olayı da kullanmak gerekiyordu ama acileyeti olmadığı için araştırmadım ve üzerinde durmadım. Bunu bir yere not ediyorum kullanacağım.

Paylaşımın için teşekkürler....
SieS
Üye
Mesajlar: 166
Kayıt: 17 Haz 2003 10:41
Konum: Konya

Mesaj gönderen SieS »

Olay budur, tekkelime ile mükemmel tam istediğim gibi
Allah razı olsun.

Teşekkürler
Ben Toprağın Sinesinde İnsan Denilen Bir Canım
Hem Düşünür, Hem Severim Budur Taştan Faklı Yanım.
Her maddenin zevlesini bedenimde taşıyorsam.
Ben ne bir taş ne bir ağaç, insanlığımla insanım.
iqprog

Mesaj gönderen iqprog »

Sanırım bu komut win2000'den öncesini desteklemiyor.

win98 kullanan hala var 3-5 onlar da bu kod papaz olacak. Haberiniz ola.
Kullanıcı avatarı
Z.D.
Üye
Mesajlar: 104
Kayıt: 01 Nis 2006 01:48
Konum: İstanbul

Mesaj gönderen Z.D. »

Evet malesef user32.dll bu fonksiyon Windows2000 ile beraber eklendi. Win95- 98 gibi sistemlerde desteklenmiyor. Linktede

http://msdn.microsoft.com/library/defau ... utinfo.asp

bu belirtiliyor zaten.
Cevapla