2010-03-04 11 views
0

J'ai expérimenté avec l'envoi de messages à partir de deux applications .NET Windows Forms en utilisant WM_COPYDATA, et cela fonctionne très bien.SendMessage à l'application de console .NET

Je voudrais savoir si cela peut être accompli avec des applications console.

Après que toute la fonction SendMessage prend dans une poignée de fenêtre, comment puis-je obtenir le handle de fenêtre d'une application de console?

[DllImport("User32.dll")] 
public static extern Int32 SendMessage(int hWnd, int Msg, int wParam, [MarshalAs(UnmanagedType.LPStr)] string lParam); 

De même, dois-je configurer un type de boucle de message dans l'application console pour pouvoir recevoir des messages?

+0

@GX: dans le premier lien dans ma réponse, il y a une version mise à jour du code qui s'adresse aux services et consoles Windows ... – t0mm13b

Répondre

3

Les méthodes IPC les plus courantes (à l'exception de WM_COPYDATA) sont des fichiers mappés en mémoire et des canaux nommés. Je vous suggère de vérifier ce dernier.

MSDN a un example of named-pipe communication. Plus précisément, les classes que vous devez utiliser sont NamedPipeServerStream et NamedPipeClientStream, qui se comportent en grande partie comme les flux réseau ordinaires une fois qu'ils ont été créés. La bonne chose est que cela fonctionne également sur un réseau, bien que vous puissiez évidemment l'utiliser également sur une seule machine.

La configuration d'une boucle de message Windows réelle dans une application console est pour le moins compliquée. Si vous avez vraiment besoin de le faire, voici un peu long article on the subject. Je recommande fortement d'utiliser des tuyaux nommés à la place si tout ce que vous voulez faire est de transférer des données; Si vous n'avez pas vraiment besoin de gérer les messages Windows standard, cela ne va pas valoir le coup.

+0

Oui, j'ai entendu parler de Named Pipes, jamais essayé de les implémenter. Merci pour les liens de ressources sympa –

1

@ tommieb75: XDMessaging est en fait ma bibliothèque :) WM_COPYDATA ne fonctionne pas pour les applications de la console car ils n'ont pas message pompe. La bibliothèque inclut toutefois une implémentation IPC basée sur IOStream qui fonctionne pour les applications et services de console. http://thecodeking.github.com/XDMessaging.Net/

+0

Cela ne fournit pas une réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son article. –

+0

Je n'avais pas assez de représentant au moment de poster pour ajouter un commentaire. – TheCodeKing