Bilgisayarın Kapatılmak istendiğini anlamak ve engel olmak
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Bilgisayarın Kapatılmak istendiğini anlamak ve engel olmak
Merhaba,
Bazı durumlarda veri tabanı sunucusu olarak kullanılan makina sorgusuz sualsiz normal yöntemlerle kapatılıyor (bilgisayarı kapat komutu uygulanarak) tabi server üzerindeki VT ye bağlı çalışan kullanıcılarda askıda kalıyorlar bu durumu engellemek için ana makinada yazıcağımız bir windows servis uygulamasının bilgisayarın kapatılması istenildiğinde bir takım kontroller yaparak gerekirse kapatmayı engellemesi, bu mümkün olabilirmi acaba?
Bazı durumlarda veri tabanı sunucusu olarak kullanılan makina sorgusuz sualsiz normal yöntemlerle kapatılıyor (bilgisayarı kapat komutu uygulanarak) tabi server üzerindeki VT ye bağlı çalışan kullanıcılarda askıda kalıyorlar bu durumu engellemek için ana makinada yazıcağımız bir windows servis uygulamasının bilgisayarın kapatılması istenildiğinde bir takım kontroller yaparak gerekirse kapatmayı engellemesi, bu mümkün olabilirmi acaba?
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
@bluekid merhaba,
WM_QUERYENDSESSION mesajı sanırım oturum kapatılmadan önce yayınlanıyor, peki ben bu durumda oturum kapatılmasını nasıl engelleyebilirim biraz daha açabilirmisiniz rica etsem.Teşekkürler.
WM_QUERYENDSESSION mesajı sanırım oturum kapatılmadan önce yayınlanıyor, peki ben bu durumda oturum kapatılmasını nasıl engelleyebilirim biraz daha açabilirmisiniz rica etsem.Teşekkürler.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Kodları denemedim ama örnek vermek gerekirse:
inherited satırını silersen ve Msg.Result değerini 0 (yoksa 1 miydi hatırlayamıyorum) yaparsan oturum kapanamıyor olması lazım. İyi çalışmalar bol denemeler.
Kod: Tümünü seç
.
.
.
private
{ Private declarations }
procedure WMQueryEndSession(var Msg : TWMQueryEndSession);message WM_QUERYENDSESSION;
public
.
.
procedure TForm1.WMQueryEndSession(var Msg: TWMQueryEndSession);
begin
//inherited;
//Msg.Result := 1;
Msg.Result := 0; //bu değer 1 mi yoksa 0 mı olacak onu hatırlayamadım
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
@sabanakman,
Çok teşekkür ederim, verdiğiniz örnek çalışıyor.
İyi çalışmalar diliyorum.
Çok teşekkür ederim, verdiğiniz örnek çalışıyor.
İyi çalışmalar diliyorum.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Volkan kardeş yazacağın böyle bir programı/servis kodunu paylaşmak istersen biz de seve seve bekleriz
Çünkü dediğin gibi kullanıcı bazında program açıkken ya da veri tabanı kapatılmadan işlerin yarıda kalması söz konusu olabilir. Böyle bir kontrol veri güvenliğini bir kademe daha artıracaktır 


Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Recep abi elbette paylaşırım, düm fırsatım olmadı bugün yazılımını yapıp örneğide buraya atıyorum,
Kolay gelsin.
Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Kodu @sabanakman vermişThe WM_QUERYENDSESSION message is sent when the user chooses to end the Windows session or when an application calls the ExitWindows function.If any application returns zero, the Windows session is not ended. Windows stops sending WM_QUERYENDSESSION messages as soon as one application returns zero.
After processing this message, Windows sends the WM_ENDSESSION message with the wParam parameter set to the results of the WM_QUERYENDSESSION message.
windows oturum kapatılırken yada windowstan çıkışta bütün açık -çalışmakta olan programlara- WM_QUERYENDSESSION mesajıyla haber gönderir. Her hangi bir program yok kapanmasın derse - 0 değeri göndererek - kapanış durur. WM_QUERYENDSESSION mesajının sonucuda WM_ENDSESSION ile uygulmalara bildirir.
Evet @sabanakman kodu paylaştı, bende bir servis örneği yapıp koyarım die düşündüm fakat kendi içimde yaptığım denemelerde, normal windows application olarak yaptığım denemelerde mesaj yakalanıp işlem başarıyla gerçekleşirken servis içinde mesajı aynı şekilde yakalayamıyorum,
Şu şekilde kullanmaya çalışıyorum,
Hizmetlerde başlamış olarak görüyorum , fakat bilgisayarı kapatırken herhangi bir mesaj yakalama işi yapmıyor.
Şu şekilde kullanmaya çalışıyorum,
Kod: Tümünü seç
unit udeneme_servis;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;
type
TDeneme = class(TService)
procedure ServiceExecute(Sender: TService);
private
procedure WMQueryEndSession(var Msg : TWMQueryEndSession);message WM_QUERYENDSESSION;
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;
var
Deneme: TDeneme;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
Deneme.Controller(CtrlCode);
end;
function TDeneme.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TDeneme.WMQueryEndSession(var Msg: TWMQueryEndSession);
begin
inherited;
Msg.Result := 0;
ShowMessage('Windowsun kapandığı algılandı.');
end;
procedure TDeneme.ServiceExecute(Sender: TService);
begin
while not Terminated do
ServiceThread.ProcessRequests(True);
end;
end.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr