98`de bilgisayarı kapatma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
98`de bilgisayarı kapatma
arkadaşlar ExitWindowsEx(EWX_SHUTDOWN,0); kodu ile 98`de bilgisayar kapatılıyor. fakat çalışan programlar varsa değişiklikler kaydedilsin mi diye soruyor. değişiklikler kaydedilmeden direk olarak bilgisayarı kod ile kapat mümkün mü? Yardımcı olursanız sevinirim. Kolay gelsin...
@Admin'e katılıyorum... Bu onayları almadan kapatmak kullanıcı adına geri dönülmez şekilde veri kaybı yaratabilir...
- Bunları bilgin dahilinde halen yapmak istiyorsan uyguladığın
kodundaki EWX_SHUTDOWN parametresine, bunu şartsız yap şeklinde EWX_FORCE parametresini eklemelisin...
şeklinde bir dene...
- Bunları bilgin dahilinde halen yapmak istiyorsan uyguladığın
Kod: Tümünü seç
ExitWindowsEx(EWX_SHUTDOWN, 0);
Kod: Tümünü seç
ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE, 0);
function ShutMeDown:string;
var
hToken : THandle;
tkp,p : TTokenPrivileges;
RetLen : DWord;
ExReply: LongBool;
Reply : DWord;
begin
case Win32Platform of VER_PLATFORM_WIN32_WINDOWS: //***Windows 9x/ME***//
begin
ExReply:= ExitWindowsEx(EWX_POWEROFF or EWX_SHUTDOWN or EWX_FORCE,0);
if ExReply then
Result:='Shutdown Initiated'
else
Result:='Shutdown failed with ' + IntToStr(GetLastError);
end;
VER_PLATFORM_WIN32_NT: //***Windows NT/2000/XP***//
begin
if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken) then
begin
if
LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid) then
begin
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes :=
SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,False,tkp,SizeOf(TTokenPrivileges),p,RetLen);
Reply := GetLastError;
if Reply = ERROR_SUCCESS then
begin
ExReply:= ExitWindowsEx(EWX_POWEROFF or EWX_FORCE, 0);
if ExReply then
Result:='Shutdown Initiated'
else
Result:='Shutdown failed with ' + IntToStr(GetLastError);
end;
end;
end;
end; //case bitişi
end;
end;
tüm vindows versiyonlarını kapatan kod
var
hToken : THandle;
tkp,p : TTokenPrivileges;
RetLen : DWord;
ExReply: LongBool;
Reply : DWord;
begin
case Win32Platform of VER_PLATFORM_WIN32_WINDOWS: //***Windows 9x/ME***//
begin
ExReply:= ExitWindowsEx(EWX_POWEROFF or EWX_SHUTDOWN or EWX_FORCE,0);
if ExReply then
Result:='Shutdown Initiated'
else
Result:='Shutdown failed with ' + IntToStr(GetLastError);
end;
VER_PLATFORM_WIN32_NT: //***Windows NT/2000/XP***//
begin
if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken) then
begin
if
LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid) then
begin
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes :=
SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,False,tkp,SizeOf(TTokenPrivileges),p,RetLen);
Reply := GetLastError;
if Reply = ERROR_SUCCESS then
begin
ExReply:= ExitWindowsEx(EWX_POWEROFF or EWX_FORCE, 0);
if ExReply then
Result:='Shutdown Initiated'
else
Result:='Shutdown failed with ' + IntToStr(GetLastError);
end;
end;
end;
end; //case bitişi
end;
end;
tüm vindows versiyonlarını kapatan kod

Tekar selam...
- Her iki kodun çalışması lazım... Bence siz bunu Delphi IDE altında Run ederek kullanıyorsunuz... Lütfen programınızı derleyip EXE halini dışardan çalıştırın... Delphi IDE trace kontrolü sebebiyle kendini kapatmış olabilir...
- Hatta... Word ile boş bir belge açıp bişeyler yazın ama kaydetmeyin... sonra bir de Delphi'yi açıp başka bir proje açın ve değişiklik yapın...
- Sonra da kendi programınızı EXE'sinden çalıştırıp deneyin, göreceksiniz çalışacaktır... Lütfen sonucu deneyip bildirin...
- Burada da aynı teknik kullanılmış farklı olarak VER_PLATFORM_WIN32_NT ile Win2K, NT, XP için eklenti var...antenonline yazdı:ExReply:= ExitWindowsEx(EWX_POWEROFF or EWX_SHUTDOWN or EWX_FORCE,0);
- Her iki kodun çalışması lazım... Bence siz bunu Delphi IDE altında Run ederek kullanıyorsunuz... Lütfen programınızı derleyip EXE halini dışardan çalıştırın... Delphi IDE trace kontrolü sebebiyle kendini kapatmış olabilir...
- Hatta... Word ile boş bir belge açıp bişeyler yazın ama kaydetmeyin... sonra bir de Delphi'yi açıp başka bir proje açın ve değişiklik yapın...
- Sonra da kendi programınızı EXE'sinden çalıştırıp deneyin, göreceksiniz çalışacaktır... Lütfen sonucu deneyip bildirin...
bilgisayarı kapatma konusunda verdiğiniz kodlar işime çok yaradı sağolun. her iki kodda bilgisayarı kapatıyor. kendi bilgisayarımda sorun çıkarmadı. Fakat ağdan öğrenci bilgisayarlarını kapatmak istediğimde "Windows Kapatılıyor" mesajı vererek bilgisayar duruyor. Bunun sorunu sizce ne olabilir? Bu komutu program gizli olarak çalışırken ve ağdaki bir biilgisayardaki tabledaki kayıdı kontrol ettirerek veriyorum. Tekrar yardımcı olabilirseniz sevinirim. saygılarımla..