|
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.rar (249
kb.)
otomesaj_kod.rar (8
kb.)
Serkan ŞAHİNOĞLU
|