2011-02-07 2 views
0

Tout en parlant avec un ami sur yahoo messenger, je lui ai dit qu'il serait vraiment cool de faire un bot pour répondre avec des messages génériques quand quelqu'un commence une conversation. En réfléchissant à ce que je lui ai dit, j'ai réalisé qu'il serait très intéressant de faire quelque chose comme ça. Le problème est que je ne connais pas grand-chose à win32. Donc, ma question est la suivante: comment relier un processus à un autre et à l'environnement Windows? Le but serait d'avoir une application fonctionnant en arrière-plan qui fait une sorte de requête pour voir quelles fenêtres sont ouvertes et quand une nouvelle fenêtre de conversation yahoo messenger apparaît, elle devrait envoyer une liste d'événements de frappe à cette fenêtre.Obtenir des entrées dans un processus

Je pourrais utiliser C# ou VC++ pour la partie programmation et je peux utiliser toute aide: soit des réponses spécifiques ou des conseils qui pourraient m'aider, par exemple: pour quoi google pour. Jusqu'à présent, mes recherches google ont seulement trouvé des applications/dlls/code qui font cela pour vous et quelques trucs de script et je ne suis pas exactement à la recherche de ça. Je veux faire tout le travail moi-même afin que je puisse apprendre de lui.

Répondre

0

http://pinvoke.net/ semble être le site que vous recherchez. Le site explique comment utiliser les fonctions de l'API Windows dans des langues de niveau supérieur. Recherche sur pinvoke pour l'une des fonctions que j'ai énumérées ci-dessous et il vous donne le code nécessaire pour pouvoir utiliser ces fonctions dans votre application.

Vous voudrez probablement utiliser la fonction FindWindow pour trouver la fenêtre qui vous intéresse.
Vous aurez besoin de l'ID de processus, utilisez GetWindowThreadProcessId pour le récupérer.
Ensuite, vous devrez utiliser OpenProcess pour permettre la lecture de la mémoire du processus.
Ensuite, vous devrez utiliser ReadProcessMemory pour lire dans la mémoire du processus pour voir ce qui se passe avec elle.
Enfin, vous devez utiliser la fonction PostMessage pour envoyer des touches à la poignée de la fenêtre.

Bienvenue dans le monde merveilleux de la programmation API Windows.

+0

Sonne bien. Merci, à la fois pour les conseils et l'accueil chaleureux. Toute l'API win32 devrait m'appartenir en un rien de temps. – cantrem

+0

Je préfèrerais simplement le coder en C++/Win32 si vous utilisez beaucoup de Win32-API de toute façon. – bjornars

+0

c'est ce que je vais faire – cantrem

0

Vérifiez la clé Autohotkey. C'est le moyen le plus rapide de faire ce que vous voulez.

+0

Je cherche la meilleure façon de le faire; et la façon dont je peux apprendre le plus; probablement ils sont les mêmes; aussi, comme je l'ai mentionné dans la question, je ne cherche pas une application qui fait ça pour moi; merci pour votre réponse de toute façon! – cantrem

1

Il semble que vous souhaitiez essentiellement contrôler d'autres applications.

Il y a environ deux façons de le faire sur les fenêtres

1 - Utilisez les fenêtres bas niveau API pour tirer aveuglément clavier et événements souris à votre application cible. La méthode de base cela fonctionne est d'utiliser le Win32 SendInput method, mais il y a une tonne d'autres travaux que vous devez faire pour trouver les poignées de fenêtre, etc, etc

2 - Utilisez une API d'automatisation de l'interface utilisateur de niveau supérieur pour interagir avec l'application dans un manière plus structurée. Le meilleur (bien, le plus récent de toute façon) pour ce faire est d'utiliser l'API Microsoft UI Automation qui est livré dans Windows Vista et 7 (il est également disponible sur XP). Here's the MSDN starter page for it.

Nous utilisons l'API UI Automation de Microsoft à mon travail pour le test automatique de l'interface utilisateur de nos applications, et ce n'est pas si mal. Méfiez-vous cependant, que peu importe comment vous avez choisi de résoudre ce problème, il est lourd de péril, et si cela fonctionne ou non dépend de l'application cible.

Bonne chance

+0

Je vais aller avec le premier pour la partie d'apprentissage. Si je devais tomber sur ce genre de tâches à l'avenir, évidemment, je vais essayer de ne pas réinventer la roue et d'aller chercher la deuxième. Merci! – cantrem

+0

J'ai remarqué que vous avez un petit nombre de réputation indiquant que vous êtes un nouvel utilisateur de StackOverflow. Bienvenue :-) Si vous trouvez que l'une des réponses ici vous a aidé, alors il est recommandé de cocher la flèche vers le haut à côté de la réponse, pour indiquer aux autres à l'avenir que vous l'avez trouvé utile. Si l'une des réponses contenait la solution que vous avez réellement décidé de mettre en œuvre, alors c'est à cela que sert la coche verte "acceptée". À votre santé! :-) –

+0

@Orieon Edwards: il me semble que je continue de me cogner dans vos commentaires; c'est aussi une bonne chose, car j'oublie toujours le système de vote. – cantrem

Questions connexes