Отправка сообщений во Flash-игру с C # и AutoIt - PullRequest
6 голосов
/ 10 мая 2009

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

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

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

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

Я только что проверил это на случайном веб-сайте вместо сайта Flash или Minesweeper, и по какой-то причине код работает, если я выполняю его из скриптовой программы Autoit, но не из моей программы на C # ...

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

Ответы [ 2 ]

4 голосов
/ 21 июня 2009

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

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

может сработать. Подробнее о том, как это работает, см. Расширенные описания окон в файле справки AutoIt. Если это все еще не работает, посмотрите WinTitleMatchMode в файле справки. Это позволяет вам установить некоторые правила снисхождения при сопоставлении заголовков окон, которые могут сделать это проще для вас.

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

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

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

1 голос
/ 20 июня 2009

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

...