windows'ta logon ve logoff durumlarında yazdığım programların çalışmasını isteiyorum. bunun için ne yapmalıyım? win 2000 server ve win xp işletim sistemleri için.
herkese kolay gelsin...
windows logon ve logoff
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Kıdemli Üye
- Mesajlar: 395
- Kayıt: 22 Tem 2004 09:15
- Konum: İzmir
- İletişim:
Selam,
Startup için menüdeki startup a koymak yeterli. Fakat programın logoff yada shutdown durumlarını algılamasını istiyorsanız, uygulama mesaj dispatcher kodunuzda bunu kontrol etmelisiniz. Logoff ve shutdown durumlarında açık tüm programlara WM_DESTROY mesajı gönderilir ve uygulamalardan kendilerini kapatmaları istenir (WM komutlarının tümü ve detaylı açıklamaları için bkz MSDN library). Bu logoff olduğu gibi kullanıcının task manager dan makinayı kapatmasıyla da gelen mesajdır. Eğer uygulama bir süre buna cevap vermez ise bilindik "o end task" penceresi gelip process i öldürmek isteyip istemediğiniz sorulur. Peki uygulamada bunu nasıl kontrol edeceğiz ? Buyrun kodlar;
Verdiğim örnekteki WM kodlarını geliştirip, değişik durumlar için de kullanabilirsiniz.
Kolay gelsin,
Startup için menüdeki startup a koymak yeterli. Fakat programın logoff yada shutdown durumlarını algılamasını istiyorsanız, uygulama mesaj dispatcher kodunuzda bunu kontrol etmelisiniz. Logoff ve shutdown durumlarında açık tüm programlara WM_DESTROY mesajı gönderilir ve uygulamalardan kendilerini kapatmaları istenir (WM komutlarının tümü ve detaylı açıklamaları için bkz MSDN library). Bu logoff olduğu gibi kullanıcının task manager dan makinayı kapatmasıyla da gelen mesajdır. Eğer uygulama bir süre buna cevap vermez ise bilindik "o end task" penceresi gelip process i öldürmek isteyip istemediğiniz sorulur. Peki uygulamada bunu nasıl kontrol edeceğiz ? Buyrun kodlar;
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp;
type
TForm1 = class(TForm)
procedure WndProc(var Message: TMessage); override;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WndProc(var Message: TMessage);
begin
case message.Msg of
WM_CREATE:
MessageBox(0,'WM_CREATE Mesajı geldi','Yeni Mesaj',0);
WM_DESTROY:
MessageBox(0,'WM_DESTROY Mesajı geldi','Yeni Mesaj',0);
WM_CLOSE:
MessageBox(0,'WM_CLOSE Mesajı geldi','Yeni Mesaj',0);
WM_CHAR:
MessageBox(0, PChar('WM_CHAR Mesajı geldi,'+#10+Chr(message.WParam)+
' tuşuna bastınız'),'Yeni Mesaj',0);
end;
inherited;
end;
end.
Kolay gelsin,
Doğan Zorlu, İzmir
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
sayın doganzorlu,
bu kodları kullandım. WM_CREATE ve WM_CHAR için mesajları verdi. ancak formu X ile ya da Alt+F4 ile kapattığımda önce WM_CLOSE, sonra WM_DESTROY için mesajları verdi. program çalışırken logoff yaptığımda da bilgisayarı shut down yaptığımda da hiçbir mesaj almadım. sadece bu kodları kullandım. acaba yapmam gereken başka şeyler de mi var?
bu kodları kullandım. WM_CREATE ve WM_CHAR için mesajları verdi. ancak formu X ile ya da Alt+F4 ile kapattığımda önce WM_CLOSE, sonra WM_DESTROY için mesajları verdi. program çalışırken logoff yaptığımda da bilgisayarı shut down yaptığımda da hiçbir mesaj almadım. sadece bu kodları kullandım. acaba yapmam gereken başka şeyler de mi var?