2009-05-09 8 views
6

Je crée un bot pour un jeu Flash, et j'ai compris comment importer toutes les fonctions AutoIt dans mon code C#.Envoyer des messages à un jeu Flash avec C# et AutoIt

string title = "Minesweeper"; 
string full = auto.WinGetTitle(title,""); 
string handle = auto.WinGetHandle(full, ""); 
if (auto.WinExists(full, "") == 1) 
    textBox1.Text = "window exists"; 
addressBox.Text = full; 

for (int r = 1; r < 40; r++) 
{ 
    auto.ControlClick(full, "", "", "left", 2, r * 10, r * 10); 
    //auto.ControlClick(handle, "", "", "left", 2, r * 10, r * 10); 
} 

(je suis sûr que celui décommentée doit être celui avec poignée et vice versa, mais cela fonctionne pour Minesweeper.)

Il fonctionne pour Démineur et ne nécessite pas d'être la fenêtre active. Lorsque j'essaie de le faire fonctionner sur mon jeu Flash, la fenêtre Internet   Explorer doit être active. Est-ce quelque chose que Flash a besoin ou y a-t-il quelque chose de plus que je pourrais faire pour le faire fonctionner quand le jeu est minimisé?

Cela ne doit pas être fait en utilisant les importations AutoIt. J'ai essayé SendMessage de user32 à un moment également, mais cela n'a pas fonctionné pour le contenu instantané du tout pour moi.

Je viens de tester cela sur un site au hasard au lieu d'un site Flash ou Démineur et pour une raison quelconque le code fonctionne si je l'exécute à partir du programme de script Autoit, mais pas de mon programme C# ...

June 20th, 2012: Je suis sûr que cela a quelque chose à voir avec la façon dont le manche est passé. J'ai fait quelques tests avec l'appel d'un fichier AutoIt EXE et en utilisant le handle du code C#, je dois lui ajouter un 0x, et puis dans le code AutoIt je dois le transtyper à partir d'une chaîne à un HWnd, ce qui pourrait être quelque chose, auquel cas je ne sais pas quoi faire puisque la fonction importée repose sur une entrée de chaîne pour le handle.

+0

Comment avez-vous exporté les fonctions autoit vers C#? Je suis juste curieux. –

+0

http://www.lancelarsen.com/Blog/tabid/72/EntryId/48/AutoIt-C-Helper-Library.aspx Theres un site avec des ressources où quelqu'un a créé une classe en important les fonctions de la bibliothèque DLL. Mais je pense que si vous incluez simplement la bibliothèque, vous n'avez pas nécessairement besoin d'utiliser cette classe. Je dis cela parce que sa classe d'aide n'inclut pas toutes les fonctions en tant qu'importations mais vous pouvez accéder à toutes les méthodes d'autoit de toute façon. –

Répondre

3

Quelque chose que vous voudrez peut-être essayer d'exclure la poignée de la fenêtre et les problèmes de manipulation des variables. Il ne devrait pas être nécessaire d'utiliser WinGetTitle le titre de la fenêtre "Minesweeper" devrait fonctionner correctement. Selon mon outil AutoIt v3 Window Info dans Windows 7, le titre et la classe de la fenêtre du démineur sont tous les deux des démineurs. Ainsi, le codage en dur

auto.ControlClick ("[TITRE: démineur CLASSE: Démineur], "", "", "gauche", 2, r * 10, r * 10);

pourrait fonctionner. pour en savoir plus sur la façon dont fonctionne voir fenêtre avancée Descriptions dans le fichier d'aide AutoIt. Si ce regard ne fonctionne toujours pas jusqu'à WinTitleMatchMode dans le fichier d'aide. Il vous permet de mettre en place des règles pour la clémence dans la correspondance de titre de fenêtre qui pourrait rendre cela plus facile pour vous

AutoIt X est la version de contrôle DLL/COM d'AutoIt. C'est ainsi que vous ajouteriez AuotIt à n'importe quelle langue prenant en charge DLL/COM. Au cas où quelqu'un d'autre se demandait how you would use AutoIt in C#. Malheureusement, AutoIt X est souvent en retard dans le développement et les tests de la langue principale. Bien que vous n'ayez aucune raison de penser que votre problème est causé par un bogue qui donne juste de l'information sur le projet AutoItX. Si vous ne l'avez pas déjà fait, vous devriez poster une copie de cette question sur le forum ActiveX/COM Help and Support (AutoItX). L'une des meilleures choses à propos de AutoIt dans mon expérience au fil des ans est la communauté (qui n'a pas bougé beaucoup ici). Cette section particulière du forum est fréquentée par certains des développeurs de la langue qui seraient heureux de vous aider.

En ce qui concerne votre 20 juin note, AutoIt traite toutes les variables comme les chaînes jusqu'à ce qu'il détecte que c'est quelque chose de spécial. Il ne sait pas qu'une valeur est hexadécimale à moins qu'elle ne commence par le 0x que vous avez mentionné. Cela a causé toutes sortes de problèmes étranges pour moi dans le passé. J'ai dû à plusieurs reprises ajouter zéro à une variable pour que AutoIt l'évalue correctement après. Cela n'arrive pas souvent avec AutoIt3 mais juste quelque chose à garder à l'esprit.

Si vous avez besoin d'un code de référence AutoIt beaucoup de membres du AutoIt forum have made Minesweeper bots vous pouvez vérifier et éventuellement voir quelque chose d'utile.

+0

merci je vais certainement regarder dans ces ressources J'utilisais juste dragueur de mines pour apprendre, et cela ne résout toujours pas mon problème du jeu flash. Mais je ferai plus de bricolage avec ce que vous m'avez montré –

+0

le temps est presque écoulé, donc je vous donne la prime même si je ne suis pas entièrement satisfait J'espérais savoir comment cliquer sur un webbrowser, je peux déjà le faire dans le dragueur de mines comme je l'ai expliqué Mais le vôtre était le meilleur des réponses disponibles merci –

1

Assurez-vous d'exécuter votre programme C# en tant qu'administrateur. C'est la seule différence que je peux voir pour une méthode de travail et l'autre non.

Questions connexes