PostThreadMessage à un autre processus

Je souhaite publier un message sur un thread qui s’exécute sous un autre processus (notamment un service Windows). J’ai lu la documentation pour PostThreadMessage mais il y a des choses qui ne sont pas claires pour moi.

Comment puis-je obtenir un handle pour le thread de mon service?

Le système effectue uniquement la mise en ordre des messages système (ceux compris entre 0 et (WM_USER-1)). Pour envoyer d’autres messages (ceux> = WM_USER) à un autre processus, vous devez effectuer un regroupement personnalisé.

Je veux envoyer mes propres messages, alors comment puis-je faire ce classement?

PostThreadMessage est loin d’être idéal ici. Obtenir l’identifiant du thread est en effet un problème car votre service devra exécuter plusieurs threads. Un pour mettre en œuvre le service, un autre pour pomper une boucle de message qui est nécessaire pour lire les messages. CreateToolHelp32Snapshot () peut énumérer les threads, mais vous ne saurez toujours pas lequel de ces deux threads est celui qui est généré.

Utilisez plutôt un canal nommé. Appelez CreateNamedPipe () dans votre service, utilisez le mode message et atsortingbuez au canal un nom préfixé par “Global \” pour qu’il soit visible dans la session utilisateur. Le code utilisateur peut se connecter au canal en utilisant le nom de tuyau connu. Vous pouvez envoyer ce que vous voulez sur le canal, mais vous devrez éviter les pointeurs car ils ne seront pas valides dans le processus de service. Même type de problème que le marshaling des messages.

D’autres possibilités sont un socket, très similaire à un tube mais utilisant un numéro de port bien connu au lieu d’un nom, et un COM hors processus. L’utilisation de COM est un avantage si vous avez des objects complexes devant être marshalés à travers les limites du processus. Évitez-le si vous n’avez pas de compétences COM cependant.