Question

Je crée un bot pour un jeu Flash et j'ai compris comment importer tous les AutoIt fonctions dans mon code C#.

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 presque sûr que celui non commenté devrait être celui avec poignée et vice versa, mais cela fonctionne pour Dragueur de mines.)

Cela fonctionne donc pour Minesweeper et ne nécessite pas que ce soit la fenêtre active.Lorsque j'essaie de le faire fonctionner sur mon jeu Flash, la fenêtre Internet Explorer doit être la fenêtre active.Est-ce quelque chose dont Flash a besoin ou y a-t-il quelque chose de supplémentaire que je pourrais faire pour que cela fonctionne lorsque le jeu est réduit ?

Cela ne doit pas nécessairement être fait à l'aide des importations AutoIt.J'ai essayé Envoyer le message de user32 à un moment donné également, mais cela n'a pas du tout fonctionné pour le contenu Flash pour moi.

Je viens de tester cela sur un site Web aléatoire au lieu d'un site Flash ou d'un dragueur de mines et, pour une raison quelconque, le code fonctionne si je l'exécute depuis le programme de script Autoit, mais pas depuis mon programme C#...

20 juin 2012:Je suis presque sûr que cela a quelque chose à voir avec la façon dont la poignée est passée.J'ai fait quelques tests en appelant un fichier EXE AutoIt et en utilisant le handle que j'obtiens du code C# comme argument, je dois ajouter un 0x à cela, et aussi dans le code AutoIt, je dois le convertir d'une chaîne en un HWnd, donc cela 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 poignée.

Était-ce utile?

La solution

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

auto.ControlClick("[TITRE:Démineur;Classe: Minesweeper], "", "", "Left", 2, R * 10, R * 10);

pourrait fonctionner.Pour en savoir plus sur la façon dont cela fonctionne, voir Descriptions avancées des fenêtres dans le fichier d'aide d'AutoIt.Si cela ne fonctionne toujours pas, cherchez WinTitleMatchMode dans le fichier d'aide.Il vous permet de définir certaines règles de clémence dans la correspondance des titres de fenêtres, ce qui pourrait vous faciliter la tâche.

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 demanderait comment utiliseriez-vous AutoIt en C#.Malheureusement, AutoIt X est souvent en retard en termes de développement et de tests par rapport au langage principal.Bien que je n'ai aucune raison de penser que votre problème est causé par un bug, je donne simplement quelques informations sur le projet AutoItX.Si vous ne l'avez pas déjà fait, vous devez poster une copie de cette question sur le Aide et support ActiveX/COM (AutoItX) forum.L'une des meilleures choses à propos d'AutoIt d'après mon expérience au fil des ans est la communauté (qui n'a pas beaucoup bougé ici).Cette section particulière du forum est fréquentée par certains développeurs du langage qui se feront un plaisir de vous aider.

Quant à votre 20 juin Remarque : AutoIt traite toutes les variables comme des 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 m’a causé toutes sortes de problèmes étranges dans le passé.J'ai dû à plusieurs reprises ajouter zéro à une variable pour qu'AutoIt l'évalue correctement par la suite.Cela n'arrive pas souvent avec AutoIt3, mais c'est juste quelque chose à garder à l'esprit.

Si vous avez besoin d'un code de référence AutoIt, de nombreux membres du Le forum AutoIt a créé des robots démineurs vous pouvez consulter et éventuellement voir quelque chose d'utile.

Autres conseils

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top