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