易语言魔兽世界怀旧服自动钓鱼源码

疫情期间,学习了一下易语言,写个自动钓鱼前台辅助,自己调了一个晚上,还可以。

视角要调到水平行

 

 

.版本 2
.支持库 dm

.程序集 窗口程序集_启动窗口

.子程序 _按钮1_被单击
.局部变量 句柄, 整数型
.局部变量 绑定, 整数型
.局部变量 退出, 文本型


延时 (3000)
句柄 = 窗口_大漠获取句柄 (“”, “魔兽世界”)
输出调试文本 (句柄)
绑定 = 绑定窗口 (句柄, “normal”, “normal”, “normal”, 0)

输出调试文本 (绑定)
延时 (300)
' 启动线程 (&_时钟1_周期事件, , )

' 退出 = 标准输入 ()
.' 判断循环首 (到整数 (退出) ≠ #V键)
    ' 钓鱼过程 ()
.' 判断循环尾 ()
钓鱼过程 ()

.子程序 钓鱼过程
.局部变量 返回坐标, 文本型
.局部变量 计次, 整数型
.局部变量 是否有声音, 逻辑型


DM.KeyPress (49)
延时 (3000)
' c4a279-000000|b49468-000000
' 返回坐标 = DM.FindColorE (399, 97, 791, 591, “d4ad6b-000000|c1996b-000000”, 0.9, 0) ‘白天
返回坐标 = DM.FindColorE (355, 9, 908, 588, “c4a279-000000|b49468-000000”, 0.9, 0)
输出调试文本 (“a:” + 返回坐标)
延时 (300)

.如果真 (返回坐标 ≠ “-1|-1”)
    返回数组 = 分割文本 (返回坐标, “|”, )
    DM.MoveTo (到整数 (返回数组 [1]), 到整数 (返回数组 [2]))

    延时 (10000)
    DM.RightClick ()
    延时 (1000)
    DM.KeyPress (#空格键)

    延时 (100)
    DM.MoveTo (0, 0)
    延时 (1000)

.如果真结束

钓鱼过程 ()

.子程序 钓到鱼
.局部变量 返回坐标, 文本型
.局部变量 返回坐标2, 文本型


返回坐标2 = DM.FindColorE (587, 590, 762, 641, “00bf00-000000”, 1, 0)
.如果真 (返回坐标2 = “-1|-1”)
    延时 (1000)

    DM.RightClick ()
    延时 (1000)
    DM.KeyPress (#空格键)
    延时 (1000)
    返回 ()
.如果真结束

返回坐标 = DM.FindColorE (到整数 (返回数组 [1]) + 10, 到整数 (返回数组 [2]) + 20, 到整数 (返回数组 [1]) + 30, 到整数 (返回数组 [2]) + 50, “8ca7d2-000000|abc4f0-000000”, 0.9, 0)
.如果 (返回坐标 ≠ “-1|-1”)
    延时 (800)
    输出调试文本 (“b” + 返回坐标)
    DM.RightClick ()
    延时 (1000)
    DM.KeyPress (#空格键)
    延时 (1000)
    DM.RightClick ()

.否则
    钓到鱼 ()
.如果结束

.子程序 _按钮2_被单击


DM.UnBindWindow ()
_启动窗口.销毁 ()


.子程序 判断声音, 逻辑型
.局部变量 绑定, 整数型
.局部变量 返回坐标, 文本型

绑定 = 绑定窗口 (声音句柄, “dx2”, “windows”, “windows”, 0)
返回坐标 = DM.FindColorE (29, 122, 89, 271, “33c133-000000”, 1, 0)
输出调试文本 (“c:” + 返回坐标)
延时 (300)
.如果 (返回坐标 ≠ “-1|-1”)
    返回 (假)
.否则
    返回 (真)
.如果结束

' DM.UnBindWindow ()
DM.SetWindowState (魔兽世界句柄, 1)
DM.LeftClick ()
延时 (300)

.子程序 __启动窗口_创建完毕


' 魔兽世界句柄 = 窗口_大漠获取句柄 (“”, “魔兽世界”)
' 声音句柄 = 窗口_大漠获取句柄 (“”, “音量”)
' 延时 (5000)
运行 (“regsvr32 ” + 取运行目录 () + “\dm.dll” + “ -s”, 真, )

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
本模块的核心作用简单描述是: 允许你在一个 易语言 子程序内进入 64 位环境! 也就是:wow 环境 -> 进入 x64 环境 -> x64 函数调用 或 x64 汇编代码 -> 退出 x64 环境 -> wow 环境,以上必须在一个子程序内完成; 简述:其实这种技术多年前就有,易语言上也有类似的模块,个别模块是有误的,还有的长期未更新或优化,也有可用但总有与处理器优化手册上规则相悖的代码,总之都不能令我满意,因此自己从头编了这样一个模块,部分实现代码借鉴 wow64ext,在此感谢 rewolf。 原理:wow64 是在 64 位操作系统上允许 32 位程序(比如易编译的程序)执行的模拟器子系统,在 64 位操作系统中,不管你的程序是 32 还是 64 位的,其实都存在两个地址空间,正常情况下 32 位程序访问的自然是 32 位的地址空间,而 64 位程序访问其 64 位地址空间。 但是这两个空间是同时存在且可以切换的,本模块就是通过该原理切换到 64 位地址空间获取 ntdll.dll 相关函数进行调用(注:此基址是 64 位的,与平常获取的 32 位模块基址截然不同); 扩展延申功能: 1、可以直接使用 64 位函数自由读(注入) 64 位进程,与很多模块调用 NtWow64xxx 系列函数实现的方式有本质不同;2、正是由于其原理本模块允许你的易程序使用 64 位 ntdll.dll 的所有函数,也就是你虽然开发的是 32 位程序,但可以实现很多 64 位函数所能实现的功能;3、我公开了部分常用函数可直接调用,其余函数获取地址后,使用 X64Call 这个通用函数调用即可;4、通过本模块的框架代码,可以轻松在易语言中实现 x64 汇编的置入代码;与很多语言不同,易的置入代码接受的是硬编码(即编译后的 opcode)而不是汇编助记符,虽然直观性没有了,但可以使我们更灵活的在一段子程序中使用 x86/x64 混编,也就是你可以使用 64 位的通用寄存器来编 x64 汇编而不必使用 REX 前缀;5、后续会考虑增加必要的功能,根据易友的反馈;6、本模块按使用难易度划分的话,属于中高级用户群,如果 Win32 API 都用不明白的怕是意义不大;7、稍后会开发个给初中级用户便捷使用的中文版 x86/x64 通用进程读模块,如果需要的人多的话;8、如有 BUG,请提供错误重现代码及执行环境,如非不可抗因素我都会及时更新的;
模块原理: wow64 是在 64 位操作系统上允许 32 位程序(比如易编译的程序)执行的模拟器子系统;在 64 位操作系统中,不管你的程序是 32 还是 64 位的,其实都存在两个地址空间,正常情况下 32 位程序访问的自然是 32 位的地址空间,而 64 位程序访问其 64 位地址空间。 但是这两个空间是同时存在且可以切换的,本模块就是通过该原理切换到 64 位地址空间获取 ntdll.dll 相关函数进行调用(注:此基址是 64 位的,与平常获取的 32 位模块基址截然不同); 也就是:wow 环境 -> 进入 x64 环境 -> x64 函数调用 或 x64 汇编代码 -> 退出 x64 环境 -> wow 环境,以上必须在一个子程序内完成; 部分实现代码借鉴 c++ 开源代码:wow64ext,在此感谢作者 rewolf。 模块功能: 实现易语言纯 64 位汇编置入代码; 允许调用易程序 64 位 ntdll.dll 的所有函数,也就是你虽然开发的是 32 位程序,但可以实现很多 64 位函数所能实现的功能; 直接使用 64 位函数ziyou读(注入) 64 位进程,与很多模块调用 NtWow64xxx 系列函数实现的方式有本质不同; 部分常用 ntdll.dll 函数已在模块直接提供,或以模拟 kernel32 函数的调用形式提供,v1.1 新增多个函数; 未提供函数获取地址后,可使用 X64Call 这个通用函数调用即可; 大部分提供的 64 位功能也同时提供了 32 位版本,以便兼容不同需求(模块在 32 位系统中不会开启 64 位功能引起异常,但 32 位功能依然可用); 支持加载任意 32/64 位 DLL,从此易语言可以调用外部 64 位 DLL 了(包括加载 kernel32.dll),v1.1 新增功能; 除了动态加载外,还支持 32 位 DLL 的内存加载,但 64 位只能加载本地 DLL 文件,v1.1 新增功能; 如有 BUG,请提供错误重现代码及执行环境,如非不可抗因素我都会及时更新的; 部分命令简述: 以下只是适用于 64 位的部分函数,模块中以相同命令形式实现的 32 位命令,这里就不列举了; 辅助函数 fn_WOW64Enabled 如果你在代码中需要使用 64 位汇编或者操作 64 位进程,则初始化时应确保本函数返回真。实际只要是 64 位操作系统,均应返回 真 fn_ProcessIsX64 检测指定进程是否为 64 位进程 fn_CalcModOrFuncHash 使用过动态调用DLL的都清楚取模块基址和函数指针,微软默认使用字符串对比,本模块可使用哈希对比效率和易用上相对提升,本函数用于计算模块或函数哈希 易内部命令 X64Call 调用 64 位函数通用版本 X64MemCopy 同类还有 X64MemCmp 函数;从 64 地址复制数据或 64 位地址与 32 位地址数据对比,但仅限进程内部 X64GetLong64 获取 64 位地址数值,同类函数还有:X64GetLong32、X64GetWord、X64GetByte X64GetTEB 取当前易程序 64 位 TEB,通过 TEB 再取 PEB,则进程和线程信息以及模块等一览无余了 GetNtdll64 ntdll.dll 在 64 位环境下的内存基址 GetModuleHandleEx64 通过模块哈希值获取其 64 位地址空间的内存基址(易进程而不是外部进程哦);同类还有 GetModuleHandle64 GetProcAddressEx64 通过函数哈希值或函数索引序号获取其 64 位调用地址;同类还有 GetProcAddress64 NtQuerySystemInformation64 查询系统信息,可获取很多类别信息。这个 API 微软已不推荐使用并给出部分替代 API,但其个别功能十分好用且没用可替代品。查询系统进程也是最全面的 OpenProcess64 打开进程句柄,关闭进程句柄时使用 CloseHandle64;【v1.1新增】 HeapAlloc64 堆管理函数,同类还有 GetDefaultHeap64/HeapReAlloc64/HeapFree64/HeapSize64;【v1.1新增】 malloc64 简化版默认堆管理函数,同类还有 realloc64/free64 RtlUnicodeToAnsi64 内核实现的 Unicode、Ansi 结构(不是数据指针)管理函数,同类还有:RtlInitAnsiString64/RtlFreeAnsiString64、RtlInitUnicodeString64/RtlFreeUnicodeString64、RtlAnsiToUnicode
易语言是一种面向过程的编程语言,它可以用来编简单的程序和工具。下面我将使用300字中文回答关于易语言的http自动更新源码。 在易语言中,要实现http自动更新的功能,我们需要使用网络编程相关的函数和操作。首先,我们需要使用打开URL函数(`openUrl`)来连接到指定的务器。然后,我们可以使用读HTML文本函数(`ReadHtmlText`)来读取务器返回的HTML代码。接下来,我们需要使用字符串操作函数(`StrLen`, `CopyStr`等)来提取出所需信息。 具体实现步骤如下: 1. 首先,我们需要将需要自动更新的文件放在务器上,并在网页中提供一个包含版本号的标签,例如`<span id="version">1.0</span>`。 2. 在易语言中,我们使用`openUrl`函数连接到务器,并使用`ReadHtmlText`函数读取务器返回的HTML代码。 3. 使用字符串操作函数来提取出版本号信息,例如使用`CopyStr`函数和字符串查找函数(`FindStr`)来获取`<span id="version">`和`</span>`之间的内容。 4. 将提取出的版本号与当前程序版本进行比较,判断是否需要进行更新。 5. 如果需要更新,我们可以再次使用`openUrl`函数连接到指定的下载链接,并使用文件入函数(`WriteToFile`)将下载的文件保存到本地。 6. 最后,我们可以使用文件操作函数(`DeleteFile`, `MoveFile`等)来删除旧版本文件,并将新版本文件移动到合适位置,完成自动更新。 总结来说,通过使用易语言中的网络编程函数和字符串操作函数,我们可以实现http自动更新的功能。在连接到务器、读取HTML代码、提取版本号信息、比较版本号、下载新文件和替换旧文件等步骤中,需要合理使用易语言的相关函数并编适当的代码来实现自动更新功能。在实际应用中,可以根据具体需求对代码进行优化和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值