2009-01-19 11 views
1

Je sais quelque chose à propos de MACROS. Je ne veux pas dire le type de langage ASSEMBLAGE. Je parle de ces programmes que vous pouvez utiliser effectuer des actions de répétitions sur un autre programme. Je parle de ces programmes que vous pouvez utiliser pour enregistrer une série d'événements sur votre ordinateur, comme les mouvements de souris et les clics de bouton, puis vous pouvez les lire. Certains d'entre eux sont suffisamment élaborés pour fonctionner uniquement sur une application paricular que vous désignez.Comment quelqu'un va écrire une "macro" en C#?

J'ai écrit l'un des genres une fois. Il s'agissait d'un programme qui a lancé une session Excel, puis utilisé le canal d'échange de données dynamique de quelque sorte pour alimenter les commandes de script de session d'excell. Ça a marché.

Mais quelque chose au niveau du système d'exploitation, j'imagine, est une toute autre histoire.

Comment quelqu'un va-t-il écrire une "macro" en C#? Je pense que l'approche que je vais prendre est d'utiliser la routine d'espion fournie avec l'environnement de développement pour obtenir une liste des messages et des paramètres appropriés (wm_lbuttondown par exemple) et ensuite utiliser l'échange dynamique de données pour envoyer ces messages au app.

J'ai donc trois questions.

  1. Est-ce la meilleure façon de procéder?
  2. Comment obtenir un identifiant pour une application déjà en cours d'exécution?
  3. Comment envoyer des messages de type utilisateur à une application déjà en cours d'exécution?

Répondre

1

Il existe différentes réponses en fonction de nombreux facteurs suivants:

  • est-il 3ème partie ou votre propre application ?
  • -t-il une interface d'automatisation
  • boîte à outils
  • GUI utilisé dans l'application

S'il est une application 3ème partie alors vous devez travailler au niveau de l'API Windows via PInvoke - le sous-classement WinMain proc, la capture et l'envoi de messages d'entrée , etc. Il existe une bibliothèque tierce pour cette tâche. C# n'est évidemment pas un bon choix pour une telle tâche.

Dans le cas d'application a un modèle d'automatisation (comme Excel), il est assez simple d'écrire le programme qui va interagir avec cette application.

Si c'est votre propre application que vous voulez améliorer avec la fonctionnalité de macros, vous devriez en tenir compte lors de l'état de conception. Si vous utilisez le pattern Command depuis le début, il n'est pas difficile de programmer l'enregistrement de la macro.

Vous devez fournir plus de détails pour obtenir une meilleure réponse.

Oh, j'ai presque oublié de répondre à ces trois questions

  1. Est-ce la meilleure façon de le faire?

Dépend scénario concret

  1. Comment puis-je obtenir une poignée à une application qui est en cours d'exécution?

Dépend de l'application. Si c'est une application native Win, vous pouvez facilement obtenir l'ID de processus et le handle de la fenêtre via WinApi.

  1. Comment envoyer des messages de type utilisateur à une application déjà en cours d'exécution?

Encore une fois cela dépend du type d'application. Pour les applications natives win, vous pouvez facilement envoyer des messages WM_XXX via WinAPI

+0

Il s'agit d'une application tierce. Il ne possède pas d'interface d'automatisation. Il s'agit principalement d'une question C#. Il existe des commandes système que vous pouvez utiliser pour récupérer une poignée d'une application déjà exécutée et il existe des façons d'utiliser cette poignée pour envoyer des commandes afin de simuler une interface utilisateur. – xarzu

-1

À moins que vous n'ayez besoin d'ajouter quelque chose dans votre propre programme, vous pouvez simplement télécharger un programme de macros clavier/souris et l'utiliser pour effectuer ces actions répétables. D'autre part, pour effectuer des macro dans votre propre programme, vous voudrez trouver un moyen d'enregistrer les boutons cliqués et les écrire dans une liste temporaire qui peut être sauvegardée, puis exécutez la liste en cliquant sur les boutons (par programmation) .

Questions connexes