octavianus_1
Messages postés9Date d'inscriptionmardi 22 août 2006StatutMembreDernière intervention 9 juillet 2014
-
25 août 2006 à 11:09
octavianus_1
Messages postés9Date d'inscriptionmardi 22 août 2006StatutMembreDernière intervention 9 juillet 2014
-
28 août 2006 à 17:42
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:
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;
cs_neko
Messages postés135Date d'inscriptionjeudi 14 août 2003StatutMembreDernière intervention12 octobre 20061 26 août 2006 à 14:51
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
octavianus_1
Messages postés9Date d'inscriptionmardi 22 août 2006StatutMembreDernière intervention 9 juillet 2014 28 août 2006 à 17:42
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é