我正在为 Flash 游戏制作一个机器人,并且我已经弄清楚如何导入所有 自动它 函数到我的 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# 程序中执行它,代码就会工作......

2012 年 6 月 20 日:我很确定这与手柄的传递方式有关。我已经做了一些测试,调用 AutoIt EXE 文件并使用从 C# 代码获得的句柄作为参数,我必须添加一个 0x 到它,然后在 AutoIt 代码中我必须将它从字符串转换为 HWnd,所以这可能是某种东西,在这种情况下我不知道该怎么做,因为导入的函数依赖于字符串输入处理。

有帮助吗?

解决方案

您可能想尝试排除窗口句柄和变量处理问题。不需要使用 WinGetTitle,“扫雷”窗口标题应该可以正常工作。根据我在 Windows 7 中的 AutoIt v3 窗口信息工具,扫雷窗口的标题和类别都是扫雷。所以硬编码

auto.ControlClick("[标题:扫雷;班级:扫雷器],“”,“”,“左”,2,r * 10,r * 10);

可能会起作用。有关其工作原理的更多信息,请参阅 高级窗口描述 在 AutoIt 帮助文件中。如果这仍然不起作用,请查找 获胜标题匹配模式 在帮助文件中。它允许您在窗口标题匹配中设置一些宽松的规则,这可以使您更轻松地进行操作。

AutoIt X 是 AutoIt 的 DLL/COM 控制版本,您可以通过它将 AuotIt 添加到任何具有 DLL/COM 支持的语言中。如果其他人想知道 如何在 C# 中使用 AutoIt. 。不幸的是,AutoIt X 在主要语言的开发和测试方面经常落后。尽管没有理由认为您的问题是由错误引起的,但只是提供了 AutoItX 项目的一些背景知识。如果您还没有,您应该将此问题的副本发布到 ActiveX/COM 帮助和支持 (AutoItX) 论坛。根据我多年来的经验,AutoIt 最好的事情之一就是社区(这里并没有发生太大变化)。该语言的一些开发人员经常光顾该特定的论坛部分,他们很乐意提供帮助。

至于你的 6月20日 请注意,AutoIt 将所有变量视为字符串,直到它检测到它有特殊之处。它不知道值是十六进制,除非它以您提到的 0x 开头。这在过去给我带来了各种奇怪的问题。我曾多次不得不向变量添加零才能​​让 AutoIt 正确评估它。AutoIt3 中不会经常发生这种情况,但请记住这一点。

如果您需要任何 AutoIt 参考代码,请联系 AutoIt 论坛制作了扫雷机器人 你可以查看一下,可能会看到一些有用的东西。

其他提示

请确保您的运行你的C#程序作为管理员。这是唯一的区别,我可以看到一个方法的工作和其他没有。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top