Envoyer un message d'une dll à un service windows

Messages postés
9
Date d'inscription
mardi 22 août 2006
Statut
Membre
Dernière intervention
9 juillet 2014
-
Messages postés
9
Date d'inscription
mardi 22 août 2006
Statut
Membre
Dernière intervention
9 juillet 2014
-
Bonjour à tous

Je dois adapter un projet (transformer un application en service, le tout en Delphi7) où une dll transmet un message à destination de l'application qui l'utilise.

Dans le code d'origine, on utilise la fonction "FindWindow" pour obtenir le handle de l'exe d'appel. Cela marche pour une application avec une interface utilisateur. Mais comment faire avec un service?

J'ai essayé GETModuleHandle(nom de l'exe), mais cela ne marche pas.

N'étant pas un programmeur confirmét, je ne sais pas s'il est préférable de garder l'approche "message" ou d'utiliser une autre approche pour avec les services.

Est-ce que qqn a une idée???

Merci d'avance

Dans la DLL, l'envoi du message est codé comme suit:  

const
  Formclass = 'TForm1';
  FormTitle = 'RFDevicesMgt';


var
 h:integer;


function DiagnosticProc(nCode:integer; wp: WPARAM; lp: LPARAM): LRESULT;stdcall;
begin if (nCode WB_RFDeviceError1) or (nCode WB_RFDeviceError2) then
  begin
   h:= FindWindow(Formclass,Formtitle);
   if h <> 0 then Postmessage (h, wm_user+1, wp, nCode);
  end;
end;
exports
DiagnosticProc index 1;

2 réponses

Messages postés
135
Date d'inscription
jeudi 14 août 2003
Statut
Membre
Dernière intervention
12 octobre 2006
1
Je viens de rechercher un peu dans les API windows ( dans delphi menu aide=>sdk Windows ) et j'ai trouvé OpenService qui retourne l'handle d'un service. Je ne sais pas si c'est ce qu'il te faut ( pas testé ) mais ça peut te donner une piste

bouh
Messages postés
9
Date d'inscription
mardi 22 août 2006
Statut
Membre
Dernière intervention
9 juillet 2014

Merci neko pour l'info.


J'ai essayé OpenService (on doit accéder au Service Control Manager puis utiliser OpenService). J'obtiens effectivement un handle, par contre lorsque j'utilise ce dernier pour l'envoi du message (sendmessage ou postmessage), le message n'est pas détecté au niveau  du service.

Je pense que le problème vient du fait que le service fonctionne au niveau SYSTEM et pas dans l'espace utilisateur loggé

Ma quête continue...