我正在为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);
}

(我很确定未注释的应该是带有handle的注释,反之亦然,但这适用于Minesweeper。)

因此,它适用于Minesweeper,并且不需要将其作为事件窗口。当我尝试使其在Flash游戏上运行时,它要求Internet Explorer窗口处于事件状态。这是Flash所需要的吗?还是在游戏最小化时我可以做些其他的事情来使它正常工作?

不必使用AutoIt导入来完成。我也曾经在user32上尝试过SendMessage,但这对我来说根本不适合Flash内容。

我只是在随机网站上而不是Flash网站或Minesweeper上对此进行了测试,由于某种原因,如果我从Autoit脚本程序而不是C#程序中执行代码,则代码可以正常工作。

,2012年6月20日:我很确定这与句柄的传递方式有关。我已经通过调用AutoIt EXE文件并使用从C#代码获取的句柄作为参数进行了一些测试,我必须向其中添加0x,然后在AutoIt代码中必须从字符串中强制转换到HWnd,所以可能是某些事情,在这种情况下,我不知道要做什么,因为导入的函数依赖于句柄的字符串输入。

最佳答案

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



可能会起作用。有关如何工作的更多信息,请参见AutoIt帮助文件中的高级窗口描述。如果仍然无法解决问题,请在帮助文件中查找 WinTitleMatchMode 。它允许您为窗口标题匹配设置一些宽大处理的规则,这可能会使您更轻松。

AutoIt X是AutoIt的DLL/COM控件版本,它是将AuotIt添加到任何具有DLL/COM支持的语言的方式。万一其他人想知道how you would use AutoIt in C#。不幸的是,AutoIt X在主要语言的开发和测试方面经常落后。尽管没有理由认为您的问题是由错误引起的,但仅提供有关AutoItX项目的背景知识即可。如果您还没有,请将该问题的副本发布到ActiveX/COM Help and Support (AutoItX)论坛。多年来,根据我的经验,关于AutoIt的最好的事情之一就是社区(社区迁移得并不多)。该语言的某些开发人员会经常光顾该论坛的特定部分,他们乐于提供帮助。

关于6月20日注释,AutoIt会将所有变量视为字符串,直到检测到它的特殊之处。除非它以您提到的0x开头,否则它不知道值是十六进制的。过去,这给我造成了各种奇怪的问题。我不得不在多个场合中向变量添加零,以使AutoIt之后能够正确地对其进行评估。对于AutoIt3,这通常不会发生,而只是要记住一点。

如果您需要任何AutoIt引用代码,那么AutoIt forum have made Minesweeper bots的许多成员都可以 checkout ,并可能会看到有用的信息。

关于c# - 使用C#和AutoIt将消息发送到Flash游戏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/844030/

10-15 19:17