Отправка сообщений во Flash-игру с помощью C# и AutoIt

Я делаю бота для 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, так что это может быть что-то, и в этом случае я не знаю, что делать, поскольку импортированная функция полагается на ввод строки для дескриптора.


person Jean-Bernard Pellerin    schedule 09.05.2009    source источник
comment
Как вы экспортировали функции autoit в С#? Мне просто интересно.   -  person Arnis Lapsa    schedule 19.06.2009
comment
lancelarsen.com/Blog/tabid/ 72/EntryId/48/ Есть сайт с ресурсами, где кто-то сделал класс, импортирующий функции из библиотеки DLL. Но я думаю, что если вы просто включите библиотеку, вам не обязательно использовать этот класс, который он сделал. Я говорю это потому, что его вспомогательный класс не включает все функции в качестве импорта, но вы все равно можете получить доступ ко всем методам autoit.   -  person Jean-Bernard Pellerin    schedule 20.06.2009


Ответы (2)


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

auto.ControlClick("[TITLE:Сапер; КЛАСС:Сапер], "", "", "left", 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 создал ботов Minesweeper, вы можете проверить и, возможно, увидеть что-то полезное.

person Copas    schedule 21.06.2009
comment
спасибо, я обязательно изучу те ресурсы, которые я только что использовал для изучения сапера, и это все еще не решает мою проблему с флеш-игрой. Но я еще немного поработаю с тем, что ты мне показал. - person Jean-Bernard Pellerin; 21.06.2009
comment
ну, время почти вышло, поэтому я даю вам награду, хотя я не полностью удовлетворен, я надеялся узнать, как нажать на веб-браузер, я уже мог сделать это в сапер, как я объяснил, но ваш был лучшим из доступных ответов спасибо - person Jean-Bernard Pellerin; 25.06.2009

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

person Kredns    schedule 20.06.2009