Free Web Hosting Provider - Web Hosting - E-commerce - High Speed Internet - Free Web Page
Search the Web

4910
Makale Tarihi : 02 Ocak 2000                   Yazan:Can Kaynak

Bir İstemciyi Bir sunucudan Kapatmak

Bana gelen e-maillerde en fazla sorulan soru bu oldu. Artık cevap vereyim dedim. Bu fonksiyonu yazdığınız istemci-sunucu uygulamayı davetsiz misafirlerden korumak için kullanabilirsiniz.

InitiateSystemShutdown fonksiyonu sistemi kapatır ve ayrıca yeniden başlatır ..

 

BOOL InitiateSystemShutdown(

LPTSTR lpMachineName, // Kapatılacak bilgisayarın ağdaki ismi

LPTSTR lpMessage, // iletişim kutusunda gösterilecek olan mesajın adresi

DWORD dwTimeout, // İletişim kutusunun gösterilme zamanı

BOOL bForceAppsClosed, // Kaydedilmemiş uygulamalar beklensin mi?

BOOL bRebootAfterShutdown // Kapatıldıktan sonra tekrar açılsın mı?

);

Parametreler

lpMachineName

Kapatılacak olan bilgisayarın ağdaki ismini tanımlayan null-terminated string değişkenidir. Eğer lpMachineName NULL yada NULL'u işaret eden boş bir string ise fonksiyon kullanıldığı uygulamanın bulunduğu bilgisayarı kapatır.

lpMessage

Bilgisayarı kapatma iletişim kutusunda görüntülenecek mesajı belirten null-terminated string değişkenidir. Eğer Hiç bir mesaj görüntülenmeyecekse NULL olarak bırakılabilir.

dwTimeOut

Görüntülenecek iletişim kutusunun ekranda kalacağı zamanı belirler. İletişim kutusu görüntülenirken bilgisayarı kapatmayı engellemek için AbortSystemshutdown fonksiyonunu kullanabilirsiniz.

Eğer dwTimeout sıfır değilse,Tanımlanmış bilgisayarda bir iletişim kutusu görüntüler. İletişim kutusu fonksiyonu kim çağırmışsa onun ismini de görüntüler. İletişim kutusu yaratıldığı zaman beep sesi çıkararak diğer bütün pencerelerin üstünde belirir. İletişim kutusu taşınabilir ama asla kapatılamaz. Timer bilgisayarı kapatmak için geriye doğru sayar. Eğer kullanıcı kendi oturumunu kapatırsa sistem mutlaka kapanır. Aksi taktirde timer sıfırlanıncaya kadar bilgisayar kapanmaz.

Eğer dwTimeOut sıfırsa, Bilgisayar hiç bir iletişim kutusu göstermez ve AbortSystemShutdown komutu ile durdurulamaz.

bForceAppsClosed

Kapatılmamış uygulamaların kaydedilmemiş bilgileri ile birlikte bilgisayarın kapatılmasını sağlar. Eğer FALSE değeri alırsa iletişim kutusu bütün uygulamaları kapatıncaya ekranda kalır.

bRebootAfterShutdown

Bilgisayar kapatıldıktan sonra sistemin tekrar açılıp açılmayacağını belirler. Eğer parametre TRUE ise tekrar başlatılır. Eğer FALSE ise tüm sanal belleği iade eder,ekranları temizler ve "bilgisayarı kapatabilirsiniz" mesajını ekrana getirir.

Geri Dönen Değerler

Eğer Fonksiyon sıfırdan farklı bir değer döndürürse başarılı olmuş demektir. Eğer olmamışsa sıfır değerini döndürür. Daha fazla bilgi için Son hata mesajını veren GetLastError fonksiyonunu çağırabilirsiniz.

Dikkat Edilecek Hususlar

Eğer fonksiyonun çağırıldığı bilgisayarı kapatmak istiyorsanız çağırılan işlem SE_SHUTDOWN_NAME imtiyazına sahip olmalı. Ağa bağlı başka bir bilgisayarı kapatmak istiyorsanız SE_REMOTE_SHUTDOWN_NAME imtiyazına sahip olmalı. Bundan kasıt bir ağda tanımlı olmayan bilgisayarı kapatamazsınız demektir. Kullanıcılar sadece SE_SHUTDOWN_NAME imtiyazını, sistem yöneticileri SE_REMOTE_SHUTDOWN_NAME imtiyazını kullanabilirler. Meydana gelen hataların çoğu ya ulaşılamayan bir bilgisayardan yada yetersiz imtiyaz tanımlamasından ileri gelir.

 

Bu Fonksiyonlar dışında:

Exitwindows

ExitWindowsEx

fonksiyonlarını da kullanabilirsiniz ama bu fonksiyonlar ağ destekli değildir sadece fonksiyonun kullanıldığı bilgisayarı kapatır.

Daha Fazla bilgi için Jankaynak@hotmail.com adresime yazabilirsiniz.

Örnek program:

const

bOnStart:boolean=FALSE;

byExpTime:byte=30;

{....}

TPassWordDialog.OKbtnClick (Sender:TObject);

const

stPassword:string[20]='MyPassWord';

begin

if not bOnStart then

begin

if Passwordbox.Text<>stPassword then

begin

bOnStart:= InitiateSystemShutdown(nil,nil,30,TRUE,FALSE);

Application.MessageBox('Uyarı','Kullanıcı şifreniz yanlış'+#13+#10+'Eğer 30sn. içinde doğru şifreyi girmezseniz'+#13+#10+'bilgisayarınız kapatılacak' ,48+0);

ExpiredTime.active:=True;

end

else

LeftTimeLabel.Caption:='Password Kabul Edildi';

end

else

begin

if Passwordbox. Text=stPassword then AbortSystemshutdown(nil);

ExpiredTime.active:=False;

LeftTimeLabel.Caption:='Password Kabul Edildi';

end;

end;

TPassWordDialog.ExpiredTimeTimer (Sender:TObject);

begin

byExpTime:=byExpTime-1;

LeftTimeLabel.Caption:=inttostr(byExpTime)+' sn. kaldı';

end;