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

StackOverflow https://stackoverflow.com/questions/844030

  •  20-08-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

auto.ControlClick("[TITLE:Сапер;Класс: MineSweeper], "", "", "Left", 2, R * 10, R * 10);

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

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top