Service application da message kontrolü

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
muratmutlu
Üye
Mesajlar: 57
Kayıt: 02 Tem 2005 02:44
Konum: Antalya

Service application da message kontrolü

Mesaj gönderen muratmutlu »

Merhaba delphi 7 ile bir service application u yaptım. Bu servisde windowsta mouse ile ilgili mesajları yakalayıp işlem yapmak istiyorum. Bunu normal bir projede yapabilmeme rağmen service olarak çalıştırdığımda yapamıyorum.

Kod: Tümünü seç

function JournalProc(Code, wParam: Integer; var EventStrut: TEventMsg): Integer; stdcall;
begin
  Result := CallNextHookEx(JHook, Code, wParam, Longint(@EventStrut));

  if Code < 0 then Exit;

  if Code = HC_SYSMODALON then Exit;
  if Code = HC_ACTION then
  begin
    if EventStrut.message = WM_LBUTTONDOWN then
    begin
        // İşlemlerim
    end;
  end;
end;

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  OzelServis.Controller(CtrlCode);
end;

function TOzelServis.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

procedure TOzelServis.ServiceExecute(Sender: TService);
begin
  while not Terminated do ServiceThread.ProcessRequests(True); 
end;

procedure TOzelServis.ServiceAfterInstall(
  Sender: TService);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create(KEY_READ or KEY_WRITE);
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('\SYSTEM\CurrentControlSet\Services\' + Name, false) then
    begin
      Reg.WriteString('Description', 'Açıklama');
      Reg.CloseKey;
    end;
  finally
    Reg.Free;
  end;
end;

procedure TOzelServis.ApplicationEvents1Message(
  var Msg: tagMSG; var Handled: Boolean);
begin
  Handled := True;
  if Msg.message = WM_CANCELJOURNAL then JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, 0, 0);
end;

procedure TOzelServis.ServiceStart(Sender: TService;
  var Started: Boolean);
begin
  JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, hInstance, 0);
end;

procedure TOzelServis.ServiceStop(Sender: TService;
  var Stopped: Boolean);
begin
  UnhookWindowsHookEx(JHook);
end;
Nerede yanlış yapıyorum acaba ? Yoksa ApplicationEvents nesnesi sadece normal uygulamalarda çalışıp servislerde mi çalışmıyor ?

(Not : Burada JournalProc fonksiyonuna sadece 1 kez giriyor ve ApplicationEvents1Message bölümüne ise hiç girmiyor.)
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Service application da message kontrolü

Mesaj gönderen vkamadan »

Merhaba ,
Windows Servis uygulamaları bildiğiniz masaüstü uygulamalarından farklı çalışıyorlar ve mesajlarla olan ilişkileride farklı http://stackoverflow.com/questions/5821 ... plications bu link belki işinize yarayabilir.

TranslateMessage ve DispatchMessage fonksiyonlarını araştırın..


İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla