2009-05-09 3 views
6

Я делаю бот для флеш-игры, и я выяснил, как импортировать все функции AutoIt в мой код C#.Отправка сообщений во флеш-игру с C# и 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); 
} 

(Я довольно уверен, раскомментируйте один должен быть один с ручкой и наоборот, но это работает для Minesweeper.)

Так это работает для Сапер и не требует, чтобы это было активное окно. Когда я пытаюсь заставить его работать над моей Flash-игрой, для этого требуется окно Internet   Explorer. Это что-то требует Flash или есть что-то дополнительное, что я мог бы сделать, чтобы заставить его работать, когда игра сводится к минимуму?

Этого не нужно делать с использованием импорта AutoIt. Я попробовал SendMessage от user32 в какой-то момент, но это совсем не работало для Flash-контента.

Я просто проверил это на случайном сайте вместо флэш-сайта или Сапер и по какой-то причине код работает, если я исполню ее из программы сценариев AutoIt, но не из моей программы C# ...

20 июня 2012 г.: Я уверен, что это связано с тем, как передается ручка. Я провел несколько тестов с вызовом файла AutoIt EXE и с помощью дескриптора, который я получаю из кода C# в качестве аргумента, я должен добавить к нему 0x, а также в коде AutoIt мне нужно отбросить его из строки к HWnd, так что это может быть что-то, и в этом случае я не знаю, что делать, поскольку импортированная функция использует строковый ввод для дескриптора.

+0

Как вы экспортировали функции autoit в C#? Мне просто интересно. –

+0

http://www.lancelarsen.com/Blog/tabid/72/EntryId/48/AutoIt-C-Helper-Library.aspx Theres сайт с ресурсами, где кто-то сделал класс, импортирующий функции из библиотеки DLL. Но я думаю, что если вы просто включите библиотеку, вам необязательно использовать этот класс, который он сделал. Я говорю, что, поскольку его вспомогательный класс не включает все функции в качестве импорта, но вы в любом случае можете получить доступ ко всем методам аутов. –

ответ

3

Что-то, что вы можете захотеть, чтобы исключить дескриптор окна и проблемы с переменной обработкой. Не следует использовать WinGetTitle, чтобы заголовок окна «Minesweeper» работал нормально. Согласно моему инструменту AutoIt v3 Window Info в Windows 7 название и класс окна Minesweeper являются как Minesweeper. Так жесткого кодирования

auto.ControlClick ("[TITLE: Сапер; КЛАСС: Сапер], "", "", "влево", 2, г * 10, г * 10);

может работать. более подробную информацию о том, как это работает см Advanced Window Описания в файле AutoIt помощи. Если это все еще не работает взгляд вверх WinTitleMatchMode в файле справки. это позволяет установить некоторые правила снисходительность в совпадении заголовков окон, что облегчит вам работу.

AutoIt X - это версия управления версиями DLL/COM AutoIt, так как вы добавляете AuotIt на любой язык, поддерживающий DLL/COM. В случае, если кто-то еще задавался вопросом how you would use AutoIt in C#. К сожалению, AutoIt X часто отстает в разработке и тестировании с основного языка. Хотя у вас нет оснований думать, что ваша проблема вызвана ошибкой, которая просто дает некоторый фон в проекте AutoItX. Если вы еще не отправили копию этого вопроса на форум ActiveX/COM Help and Support (AutoItX). Одна из лучших вещей в AutoIt в моем опыте на протяжении многих лет - это сообщество (которое здесь не так много переехало). Этот раздел форума часто посещают некоторые разработчики языка, которые будут рады помочь.

Что касается вашего 20 июня note, AutoIt обрабатывает все переменные, такие как строки, пока не обнаружит что-то особенное. Он не знает, что значение равно hex, если оно не начинается с 0x, о котором вы упомянули. В прошлом это вызывало для меня всевозможные странные проблемы. Я несколько раз добавлял ноль к переменной, чтобы AutoIt правильно оценивал ее. Это часто случается не с AutoIt3, а только с тем, что нужно иметь в виду.

Если вам нужен какой-либо код кода AutoIt, то много членов AutoIt forum have made Minesweeper bots вы можете проверить и, возможно, увидеть что-то полезное.

+0

спасибо, я обязательно посмотрю на те ресурсы ressources Я просто использовал тральщик, чтобы узнать об этом, и это все еще не разрешает мою проблему флеш-игры. Но я еще немного потрудился с тем, что вы показали мне. –

+0

Время, когда-либо приближающееся, поэтому я даю вам щедрость, хотя я не полностью удовлетворен Я надеялся выяснить, как щелкнуть по webbrowser, я мог бы уже сделать это в тральщике, как я объяснил Но ваш был лучшим из доступных ответов спасибо –

1

Убедитесь, что вы используете свою C# программу в качестве администратора. Это единственное различие, которое я вижу для одного метода, а другой нет.