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