BilgiTeknoloji.net    
b i l g i   t e k n o l o j i   y a z ı l ı m

Ana Sayfa

Marjinal XML Access Pratik Uygulamalar Projeler Ekonometri Dilimiz Editörden Çetrefil İletişim
 

ZAMAN AYARLI MESAJ KUTUSU

Mesaj kutularının zaman ayarlı olması kullanıcının bilgisayar başında olmadığı durumlarda işlemin devam etmesi açısından faydalı olabilir. Tabii bunu doğrudan sağlayan özel bir komut yok.

Yapılması gereken iş mesaj kutusunun ve içindeki butonun handle değerlerinin bulunması ve butona tıklama mesajının gönderilmesi şeklinde olacak.

Başlamadan önce küçük bir pratik yapabilirsiniz. Bilgisayarınızda herhangi bir buton seçin. Bu, bir dosya açma penceresindeki herhangi bir buton olabileceği gibi Başlat butonu da olabilir.

Başlat butonunun handle değerini (yani onu ifade eden adresi) bulmak için Spymon++ programını sitemizden yükleyebilirsiniz. Ya da varsa Visual Studio Tools menüsünden ulaşabileceğiniz Spy++ programını çalıştırıp Find Window komutunu kullanabilirsiniz.

Sonrasında butona aşağıdaki şekilde tıklama komutu gönderilebilir.

var
  butonh:HWND;
begin
  butonh:=123456; //Spymon++'da bulunan numarayı yazın.
  SendMessage(butonh,WM_LBUTTONDOWN ,MK_LBUTTON,0);
  SendMessage(butonh,WM_LBUTTONUP ,MK_LBUTTON,0);

Aşağıdaki kodda Button1'e basıldığında 5 saniyelik bir mesaj kutusu gösteriliyor. Süre sonuna kadar kullanıcı bir seçim yapmadığı takdirde otomatik olarak YES komutu seçiliyor.

procedure MesajTimer;
var
  msgh, butonh, temph:HWND;
begin
  msgh:= GetWindow(form1.Handle,GW_HWNDPREV);
  butonh:=GetWindow(msgh,GW_CHILD);
  SendMessage(butonh,WM_LBUTTONDOWN ,MK_LBUTTON,0);
  SendMessage(butonh,WM_LBUTTONUP ,MK_LBUTTON,0);
end;

function OtomatikMesaj(h: HWND; mesaj,baslik:string; flags:Integer; saniye_sure:DWORD):integer;
var
  timer_id:integer;
begin
  timer_id := SetTimer(0, 0, saniye_sure*1000, @MesajTimer);
  //milisaniye olması için 1000 ile çarpıldı.
  result := MessageBox(h, pchar(mesaj), pchar(baslik), flags);
  KillTimer(0, timer_id);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  sonuc:integer;
begin
  sonuc:=OtomatikMesaj(handle, 'mesaj.......','başlık', MB_YESNO, 5);
  ShowMessage('Sonuç = ' + inttostr(sonuc));
end;



SetTimer bir fonksiyonun belli bir süre bitiminde çalıştırılmasını sağlar. Delphi'deki Timer nesnesi de aslında SetTimer kullanır. Periyot sonunda her seferinde KillTimer ile zamanlayıcı kapatılır. Eğer Timer'ın beklemeye devam etmesi gerekiyorsa KillTimer'ın hemen ardından tekrar SetTimer çalıştırılır.

procedure TTimer.UpdateTimer;
begin
  KillTimer(FWindowHandle, 1);
  if (FInterval <> 0) and FEnabled and Assigned(FOnTimer) then
  if SetTimer(FWindowHandle, 1, FInterval, nil) = 0 then
  raise EOutOfResources.Create(SNoTimers);
end;
 

DOSYALAR:
otomesaj.zip (249 kb.)
otomesaj_kod.zip
(8 kb.)


Serkan ŞAHİNOĞLU


http://BilgiTeknoloji.net