windows logon ve logoff

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
nilnur
Üye
Mesajlar: 60
Kayıt: 21 Tem 2004 05:06

windows logon ve logoff

Mesaj gönderen nilnur »

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...
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\winlogon u bi incele istersen.
shell=explorer.exe kısmını değiştirince oluyormuş galiba (logon için)
DeveloperToolKit

..::|YeşilMavi|::..
nilnur
Üye
Mesajlar: 60
Kayıt: 21 Tem 2004 05:06

Mesaj gönderen nilnur »

registery'ye girmeden de yapılabiliyormuş.

C:\Documents and Settings\All Users\Start Menu'ye programı koyunca her logon'da program çalışırmış.

logon konusunda pek sorunum yok. asıl sorun logoff'ta. program bir türlü logoff'u yakalamıyor.(en azından benim bilgim dahilinde)
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

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;

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.
Verdiğim örnekteki WM kodlarını geliştirip, değişik durumlar için de kullanabilirsiniz.

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)
nilnur
Üye
Mesajlar: 60
Kayıt: 21 Tem 2004 05:06

Mesaj gönderen nilnur »

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?
Cevapla