【发布时间】:2010-10-25 01:09:21
【问题描述】:
我正在为 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。)
所以它适用于 Minesweeper 并且不需要它是活动窗口。当我尝试让它在我的 Flash 游戏上运行时,它需要 Internet Explorer 窗口处于活动状态。这是 Flash 需要的东西,还是在游戏最小化时我可以做些什么来使它工作?
这不必使用 AutoIt 导入来完成。我也曾一度尝试来自 user32 的SendMessage,但这对我来说根本不适用于 Flash 内容。
我只是在一个随机网站而不是 Flash 网站或扫雷器上对此进行了测试,由于某种原因,如果我从 Autoit 脚本程序中执行代码,而不是从我的 C# 程序中执行,代码可以正常工作...
2012 年 6 月 20 日:我很确定这与句柄的传递方式有关。我已经通过调用 AutoIt EXE 文件并使用从 C# 代码中获得的句柄作为参数进行了一些测试,我必须添加一个 0x 到它,然后在 AutoIt 代码中我必须从一个字符串到 HWnd,所以这可能是什么,在这种情况下我不知道该怎么做,因为导入的函数依赖于句柄的字符串输入。
【问题讨论】:
-
你是如何将 autoit 函数导出到 c# 的?我只是好奇。
-
lancelarsen.com/Blog/tabid/72/EntryId/48/… 有一个带有资源的站点,其中有人创建了一个从 DLL 库导入函数的类。但我认为,如果你只包含库,你不一定需要使用他制作的那个类。我这么说是因为他的帮助类不包含所有作为导入的函数,但无论如何您都可以访问所有 autoit 方法。