Jea*_*rin 6 c# flash bots minimized
我正在为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);
}
Run Code Online (Sandbox Code Playgroud)
(我很确定未注释的那个应该是带句柄的那个,反之亦然,但这适用于扫雷.)
因此它适用于扫雷并且不要求它成为活动窗口.当我尝试使其在我的Flash游戏上运行时,它需要Internet Explorer窗口是活动的.这是Flash需要的东西还是还有一些额外的功能可以让游戏最小化时使其工作?
这不必使用AutoIt导入来完成.我也曾在user32 尝试过SendMessage,但这对我来说根本不适用于Flash内容.
我刚刚在随机网站上测试了这个,而不是Flash网站或Minesweeper,并且出于某种原因,如果我从Autoit脚本程序中执行它,而不是来自我的C#程序,代码可以正常运行...
2012年6月20日:我很确定这与句柄传递的方式有关.我已经做了一些测试,调用AutoIt EXE文件并使用我从C#代码获取的句柄作为参数,我必须添加一个0x,然后在AutoIt代码中我必须从字符串转换为一个HWnd,所以这可能是某种东西,在这种情况下我不知道该怎么做,因为导入的函数依赖于句柄的字符串输入.
您可能想尝试排除窗口句柄和变量处理问题。不需要使用 WinGetTitle,“扫雷”窗口标题应该可以正常工作。根据我在 Windows 7 中的 AutoIt v3 窗口信息工具,扫雷窗口的标题和类别都是扫雷。所以硬编码
auto.ControlClick("[标题:扫雷;类别:扫雷], "", "", "左", 2, r * 10, r * 10);
可能会起作用。有关其工作原理的更多信息,请参阅AutoIt 帮助文件中的高级窗口描述。如果这仍然不起作用,请在帮助文件中查找WinTitleMatchMode 。它允许您在窗口标题匹配中设置一些宽松的规则,这可以使您更轻松地进行操作。
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 论坛的许多成员都制作了扫雷机器人,您可以查看并可能会看到一些有用的东西。