2009-09-16 6 views
0

Utilisation de VS2003 (.Net 1.1) Nous avons une application MDI MDI qui génère une fenêtre C# en tant que client COM.Catching User Input dans Client C# COM

Nous devons capturer toutes les entrées utilisateur dans l'application et nous utilisons actuellement CWinApp :: PreTranslateMessage() pour attraper les commandes dirigées vers les fenêtres MFC mais cela n'attrape évidemment pas les messages dirigés vers la fenêtre C#.

Quelle est la meilleure façon d'intercepter toutes les entrées utilisateur dans le client C#?

+0

Quelles interfaces utilisez-vous pour l'héberger? Il peut prendre en charge l'une des interfaces OLE standard qui vous permettra de le faire ... –

Répondre

0

Contrôlez-vous la fenêtre C#? Si c'est le cas, les formulaires C# ont une méthode WndProc que vous pouvez remplacer et filtrer les messages.

Si vous utilisez une application WinForms standard, vous pouvez ajouter un gestionnaire à Application.AddMessageFilter pour créer un hook de message dans C#. (Voir mon article here.) Je ne suis pas sûr que cela fonctionnerait étant donné que le formulaire est dans une application MFC.

+0

Nous contrôlons le client C#. Il a un certain nombre de contrôles différents, donc dois-je écrire une méthode WndProc pour chaque contrôle? Ou est-ce que tous les messages passent à travers un message "global" quelque part? En outre, j'avais essayé la route AddMessageFilter mais parfois la méthode était appelée mais souvent elle ne l'était pas. Pourquoi est-ce? –

+0

Ahh, je vois qu'il est possible d'attraper tous les messages avec WndProc: http://www.codeproject.com/KB/dotnet/devicevolumemonitor.aspx –

+0

Après de nombreuses tentatives, je ne pouvais pas obtenir ce travail. Je voulais capturer les messages afin que je puisse rediriger l'utilisateur vers une boîte de dialogue de connexion, mais j'ai fini par le faire dans le code MFC et j'ai simplement désactivé la fenêtre C# lors de la déconnexion. –