2009-05-21 9 views
0

Je suis sur le point de refaire une demande d'apprentissage en ligne. Mais maintenant je veux prendre cette nouvelle version à un nouveau niveau. Voici donc le scénario: un utilisateur ouvre mon application. Il choisit ensuite d'être formé dans l'une des applications MS Office les plus courantes (Word, Excel, Outlook, etc.).Code NET pour «écouter» une application de bureau (obtenir les événements soulevés par l'utilisateur)

Mon application donnera les instructions utilisateur sur ce qu'il faut faire: créer un nouveau document, tapez un texte, mettez en gras, insérer une image, etc. Si fait correctement l'utilisateur attribuer des points. Sinon, démérites.

Mais (il y a toujours un but) pour que j'accomplisse cela, je dois être capable de "voir" ce que fait l'utilisateur. J'utilise NET (2.0 - C# ou VB, peu importe lequel). Quelqu'un peut-il dire comment faire cela? J'ai besoin de gérer l'application Office ouverte ou d'en démarrer une nouvelle, puis d'écouter et d'évaluer tout ce que fait l'utilisateur.Si l'utilisateur se trompe, je dois également envoyer des instructions à l'application Office et le faire lui elle.

Est-ce possible? Quelqu'un at-il des exemples de code sur la façon de faire cela ou quelque chose de similaire?

Merci à l'avance

PS: Je ne voudrais pas avoir à ajouter un office cette fin! Édité: La raison pour laquelle je ne veux pas entrer dans VBA est que je voulais m'assurer que c'était réutilisable pour aider les utilisateurs à utiliser d'autres applications plus tard. Je voulais donc créer un programme d'écoute pour une application et décoder l'interaction de l'utilisateur avec celle-ci.

Répondre

1

Il est en fait un crochet Windows conçu pour les applications de formation assistée par ordinateur appelé WH_CBT et il fournit une notification lorsque les fenêtres sont activés, réduits au minimum, déplacé, redimensionné, les commandes sont exécutées, les événements souris/clavier, etc.

Je ne vais pas vous mentir cependant, hooker est un sujet assez complexe mais est certainement accessible à partir de .NET. Jetez un oeil à l'article MSDN suivant qui explique comment utiliser l'accrochage des messages dans .NET puis jetez un oeil aux deux liens qui suivent pour plus d'informations sur WH_CBT.

Cutting Edge: Windows Hooks in the .NET Framework

MSDN Library: SetWindowsHookEx Function

MSDN Library: CBTProc Function

+0

Je ne m'attendais jamais à ce que ce soit facile :) Merci pour votre réponse. Cela semble être le chemin à parcourir! –

2

L'API d'automatisation pour Office est une API COM. Vous pouvez l'appeler à partir du code géré (.NET), mais cela ajoute simplement une couche supplémentaire et rend les choses beaucoup plus complexes. J'ai fait beaucoup de travail de bureautique en utilisant à la fois VB/VBA et C# et même si j'aime C# comme langue, je dois dire qu'il est beaucoup plus difficile de piloter Office de cette façon. Beaucoup. (Il est facile de le faire fonctionner sur votre machine, au moins une fois - mais ne vous laissez pas tromper). L'API vous permet d'intercepter certains événements tels que les sélections de menu, les clics sur les boutons de la barre de commande, l'activation de fenêtre, l'ouverture/fermeture de document, etc. Vous pouvez également capturer l'événement "sélection modifiée" sur ce que fait l'utilisateur. Mais, il y a beaucoup de tâches de manipulation directe qu'un utilisateur peut effectuer que vous ne seriez pas capable de piéger (par exemple glisser-déposer, redimensionner une image, etc.) et pour vos besoins, je dirais que être un gros problème.

Je dois dire que je doute vraiment que vous seriez en mesure de faire ce que vous proposez - du moins, pas assez bien pour le rendre transparent. Et je pense que cela doit être assez à l'épreuve des bombes étant donné votre base d'utilisateurs.

Désolé. :-(

+0

Rien à être désolé :) pas votre faute. Merci pour la contribution mais j'ai toujours l'espoir qu'il peut y avoir un autre moyen autour de ceci :) Si je le trouve je le posterai. –

+0

Devinez vous obtiendrez les points de prime :) Personne ne semble savoir comment résoudre celui-ci ... –

+0

Semble que je me suis trompé :) Merci pour l'entrée, cependant. –

Questions connexes