| 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; |