0

J'ai deux éléments de la technologie Windows que je voudrais tester ensemble: un TSP (un fournisseur de services TAPI) et une API entourée de matériel. L'API accepte les requêtes de manière synchrone mais renvoie le résultat succès/échec/état de manière asynchrone en envoyant des messages à un HWND transmis. Si je comprends bien, le problème est que, comme un TSP s'exécute comme un service Windows, son contexte d'exécution n'a pas accès à la plupart des fonctions Windows interactives. Donc, autant que je voudrais relier directement les deux ensemble, je ne peux pas - autant que je sache, le TSP n'a pas (et en effet ne pouvait pas) avoir un HWND pour l'API pour envoyer des messages à. :-(Quel est un bon moyen de connecter un service Windows avec une fenêtre interactive (HWND)?

Pour quelqu'un comme moi qui n'a jamais programmé que des trucs Windows d'un côté de la ligne de service/interactive à la fois, tout cela est un peu un gratte-tête, mais Windows est comme ça , il doit y avoir plusieurs façons sensibles d'obtenir des messages à travers cette ligne, sûrement

? Comment voulez-vous me conseiller d'essayer de brancher ces deux choses? Merci! :-)

Répondre

0

Je suggère d'utiliser MSMQ pour passer messages entre les deux applications différentes. Je peux être un peu encombrant mais ça marcherait.

1

Un service peut créer une "fenêtre de message" (une fenêtre dont le parent est HWND_MESSAGE) et exécuter une pompe de message. Une fenêtre de message n'a pas d'interface utilisateur et n'interagit donc pas avec le bureau.

+0

Donc, j'appellerais RegisterClass(), puis –

+0

@Nick: Oui, vous devez RegisterClass (pour enregistrer votre WndProc) et CreateWindow comme dans une application de l'interface utilisateur, ainsi que GetMessage/DispatchMessage dans une boucle pour pomper messages. L'appel habituel qui serait ignoré est ShowWindow/UpdateWindow car il n'y a aucun visuel à afficher. – Tergiver

+0

OK, merci Tergiver, je vais essayer! :-) –

0

Votre service peut créer un objet de mappage de fichier nommé dans l'espace de noms d'objets Global, puis votre programme interactif peut alors ouvrir ce mappage de fichier. Vous pourriez alors communiquer via la mémoire partagée.

Questions connexes