剑仙十号 外挂工程师
关注数: 19 粉丝数: 442 发帖数: 3,966 关注贴吧数: 96
免注册调用大漠。3.1233版本 var 线程ID功能 执行 免注册调用大漠。3.1233版本 var 线程ID 功能 执行() 免注册测试() 结束 功能 按钮0_点击() 免注册测试() 结束 功能 启动_热键() var ret = 线程获取状态(线程ID) //防止线程重启动,线程不能关闭. if(ret == 0) 线程ID = 线程开启("执行", "") end 结束 功能 终止_热键() 线程关闭(线程ID) 结束 功能 免注册测试() //测试 var dm = 插件("dm.dmsoft") traceprint(vartype(dm)) var ver = dm.Ver() traceprint("大漠的版本号:" & ver) dm.Moveto(0, 0) sleep(30) dm.RightClick() sleep(30) 结束 //防检测, 防止第三方. 功能 大漠3点1233免注册_初始化() //atl.dll 由论坛大神编写,感谢。 atl.dll是标准dll,适合所有语言调用. //例如,使用Delphi7,免注册调用大漠. 使用c++,免注册调用大漠. 使用c#,免注册调用大漠. 防检测. //pj大漠3.1233收费函数的功能,请参考 剩竹大神的代码。 //pj大漠6.1233收费函数的功能,请参考 思想者的代码。 // //注意: 免注册代码,必须写在窗口初始化。 //在执行完这些代码前,不要创建大漠对象,不要操作大漠对象。 //否则,会因为对象无法覆盖,调用出错。 var ws = 插件("Wscript.Shell") ws.run("regsvr32 atl.dll /s") var path, atl路径, dm路径 path = 获取资源路径("rc:") atl路径 = path & "atl.dll" dm路径 = path & "dm.dll" var 逻辑值 = 动态库调用(atl路径, "int", "SetDllPathA", "char *", dm路径, "int", 0) traceprint("免注册情况,返回1 成功,返回空 失败:" & 逻辑值) var dm = 插件("dm.dmsoft") traceprint(vartype(dm)) var ver = dm.Ver() traceprint("大漠版本号:" & ver) 结束
8封装。用函数封装 系统api 8封装。用函数封装 系统api 先设定C99标准。 设定标准,有助于tc健康发展。 1、增加库文件(****.t文件): 右键“项目管理-**项目名字”。 添加,新建文件(N) 文件名: structAPI,位置: 使用默认的。 2、把自定义的结构体/API函数,封装到“structAPI.t”文件。 3、定义部分带0。封装部分带0。 带0的,表示这是形参,是定义部分。 不带0的,表示这是实参,是调用部分。 // C++中调用系统API,可以直接写/直接调,简直和调用C内建api一样简单。 但在aj,tc,e中调用系统API,都得先定义,先声明,麻烦多多的。 把常用系统API/ 常用API结构体,封装到“structAPI库.t”。 当某项目 使用到某个API时,在项目中新建一个“structAPI.t”, 再在“structAPI库.t” 中搜索该API名字,复制到“structAPI.t”使用。这样就省力多了。平时多积累,用时少费心。易api伴侣也是这样操作。 // 重用性强。编程就有这种好处, 来来去去的,都是这些东西。一次编写,多次调用,这不是吹牛的。 ======================================================= 封装,不带传址参数的api。 这是比较简单的。 api带几个参数,函数就定义几个参数。 api带返回值,就用return返回数值。 照单拾药,照本宣科就行。 // 封装带有传址参数的api。 用函数封装,带有传址参数的api,形参必须带上&。 什么是形参,什么是实参?参考教程: 第三法,函数的定义。形参和实参。 第三法,函数的定义。引用传参的学习。 . 例子:GetCursorPos,VB声明: Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long 说明:获取鼠标指针的当前位置返回值Long,非零表示成功,零表示失败。 会设置GetLastError参数表,参数类型,及说明lpPointPOINTAPI,随同指针在屏幕像素坐标中的位置载入的一个结构。 在VB中, ByVal 代表普通传参,是传值的。 ByRef 代表引用传参,是传址的。 VB默认是传址的,省略标识ByVal,都默认为传址。Ip也代表传址。 . VC声明 Api 函数功能:该函数检取光标的位置,以屏幕坐标表示。函数原型:BOOL GetCursorPos(LPPOlNT IpPoint)。参数:IpPint:POINT结构指针,该结构接收光标的屏幕坐标。 Ip是代表传址。 ——————————————————————— ——————————————————————— 执行部分: 功能 执行() var pt = pt0()//用新数组pt,继承结构体。 GetCursorPos(pt) messagebox(pt["x"]["value"]&","& pt["y"]["value"]) 结束 // 定义部分。封装部分。 功能 pt0()//定义结构体。使用下一行要封装的数组名,作为函数名。 var pt0 = 数组() pt0["x"] = 数组("long"=1,"value"=0) pt0["y"] = 数组("long"=1,"value"=0) return pt0 结束 功能 GetCursorPos(&pt0)//定义api。把下一行要封装的api名,作为函数名。 //封装带传址参数,形参必须带上&,&pt0。 var ret0=dllcall("user32.dll","long","GetCursorPos","pstruct",pt0) return ret0 结束 ======================================================= 上面的讲解繁多。 把注释去掉,代码还是很简洁的。 功能 执行() var pt = pt0() GetCursorPos(pt) messagebox(pt["x"]["value"]&","& pt["y"]["value"]) 结束 功能 pt0() var pt0 = 数组() pt0["x"] = 数组("long"=1,"value"=0) pt0["y"] = 数组("long"=1,"value"=0) return pt0 结束 功能 GetCursorPos(&pt0) var ret0=dllcall("user32.dll","long","GetCursorPos","pstruct",pt0) return ret0 结束 本贴记录在:tc简单开发吧,精品区目录8,项目未归类。
8封装。用函数 封装struct。 8封装。用函数 封装struct。 先设定C99标准。 设定标准,有助于tc健康发展。 1、增加库文件(****.t文件): 右键“项目管理-**项目名字”。 添加,新建文件(N) 文件名: structAPI,位置: 使用默认的。 2、把自定义的结构体/API函数,封装到“structAPI.t”文件。 3、定义部分带0。封装部分带0。 带0的,表示这是形参,是定义部分。 不带0的,表示这是实参,是调用部分。 结构体,英文名是struct。 结构体是类和对象的东西。 什么是结构体? 把多种基本的数据类型,封装成复合的数据类型,这就是结构体。 函数,结构体,和类,都属于变量的数据类型的一种。 结构体有什么用处? 调用系统API时,经常要用到结构体。 脚本语言,是没有结构体的。tc使用数组 来构造的结构体。 用函数来封装结构体,使代码工整,使代码可读性更强。 在调用该函数时,楼主使用变通的办法:用一个新数组,来接收函数的返回值。这样,封装在函数内的结构体,就被继承过来。 ——————————————————————— 功能 pt0()//定义结构体。用下一行要封装的数组名,作为函数名。 var pt0 = 数组()//变量的作用域。pt0定义在函数内,是局部数组. pt0["x"] = 数组("long"=1,"value"=0) pt0["y"] = 数组("long"=1,"value"=0) return pt0//返回数组名。 结束 功能 执行() var pt = pt0()//调用封装函数。用新数组pt,继承结构体数组。 //在调用函数pt0()之后,pt0()的返回值,被新数组pt继承。这样在 执行()中,pt就是继承过来的结构体。 //新结构体pt,就可以作为参数使用了。 结束 ——————————————————————— ——————————————————————— 上面讲解繁多。 把注释去掉,代码量还是很简洁的。 功能 pt0() var pt0 = 数组() pt0["x"] = 数组("long"=1,"value"=0) pt0["y"] = 数组("long"=1,"value"=0) return pt0 结束 功能 执行() var pt = pt0()//调用封装函数。 //新结构体pt,就可以作为参数使用了。 结束 ——————————————————————— ——————————————————————— tc。对tc结构体的理解。 在C++中,结构体是一种新的数据类型。尤如tc的整型,浮点型,逻辑型,字符串型, 函数,是变量的数据类型。 结构体,是变量的数据类型。 类也理解为,变量的一种数据类型。 跟官方的信息确认。 var 座标 = array() 座标["x"] = array("long" = 1, "value" = 0) 座标["y"] = array("long" = 1, "value" = 0) while(1) dllcall("user32.dll", "long", "GetCursorPos", "pstruct", 座标) traceprint(座标["x"]["value"]) traceprint(座标["y"]["value"]) sleep(1000) end // "long" = **,是申请long类型的数组空间,用来储值。 "long" = 1,申请一个long类型的内存空间(4字节)? "long" = 2,申请一个long类型的内存空间(8字节)? "long" = 3,申请一个long类型的内存空间(12字节)? "value" = 0,这是 对数组元素的清零/ 赋初值? // 再问一例子。dllcall实例之气泡演示: //本示例首先 感谢 鬼玺 同学…… NOTIFYICONDATA["szTip"] = array("wchar"=128,"value"=tip) NOTIFYICONDATA["dwState"] = array("long"=1,"value"=0) NOTIFYICONDATA["dwStateMask"] = array("long"=1,"value"=0) NOTIFYICONDATA["szInfo"] = array("wchar"=256,"value"=content) NOTIFYICONDATA["uTimeoutAndVersion"] = array("long"=1,"value"=0) NOTIFYICONDATA["szInfoTitle"] = array("wchar"=64,"value"=title) NOTIFYICONDATA["dwInfoFlags"] = array("long"=1,"value"=0) tc帮助文档中讲到, "wchar"=128,"wchar"=256,"wchar"=64, 在结构体中出现wchar,一般都会被指定缓存长度大小 64字节.128字节.256字节. 这里是否理解为,申请64字节.128字节.256字节大小的内存空间。 ======================================================= ♡い波波: 18:51:38 在tc结构体里面,只有char/wchar类型可以申请多数组,其它类型的 都不允许。 像 var 座标 = array() 座标["x"] = array("long" = 100, "value" = 0) 座标["y"] = array("long" = 200, "value" = 0) 把long的个数写成100,200,它的内容还是只占四字节。不会占400,800字节。 这个在帮助文档中有说明。 ♡い波波: 18:52:26 座标["y"] = array("char" = 200, "value" = 0) "char" = 200, 这样写, 则会申请两百个字节空间 除非char以外的类型,都是预留没有做处理。 稳定。 :18:53:31 谢谢。除了char/ wchar,其它类型 不管标识符的数值, 是填100,200,还是填1000,2000,tc内部申请到的空间,都只是四字节。 本贴记录在:tc简单开发吧,精品区目录8,项目未归类。
8封装。把归类后的函数,封装到tc库 8封装。把归类后的函数,封装到tc库 1、把常用函数封装在tc库,实现函数的一次编写,多次调用。 程序的重用性。实现函数在多个项目的重用。 2、实现代码框架的构造。 商业辅助脚本,代码往往有几千行(6部件)。 把几千行代码,糊在1个“***界面.t”,乱七八糟的,那是不成熟的做法。 把6部件分别做成: 自动喊话.t,补红蓝.t,选怪杀怪.t,定点回位.t,组队离队.t,回城补给.t。 再在“***界面.t” 里面循环调用,这样框架清清楚楚,整整齐齐的,不容易出现错误。 3、tc库的作用,跟按键精灵.命令库的效果一样。 但tc库 能够复制多个副本,修改副本时不影响原件。按键精灵.命令库不能构建框架,不能复制副本。 基于这三点,用tc开发项目,比按键精灵更有优势。 ======================================================= tc库,就是一个 ***.t文件。 一般来说,主界面对应一个***.t文件,多个子界面 对应多个***.t文件。 但也可以新建不带界面的 ***.t文件。 . 在易语言中,主窗口对应一个“窗口程序集”,多个子窗口 对应多个“窗口程序集”。 . 在Delphi7中,窗口对应的东西叫单元。 不管tc库,窗口程序集,窗口单元,说的都是同一个东西。 // 在新项目中新建tc库,操作步骤很简单: 右键“项目管理-***项目名字” 添加,新建文件(N) 文件名: 输入文件名。 位置: 输入文件位置。 把它命名为:structAPI //意思是结构体&API. 点确实后,tc库全名是:“structAPI.t” // 在新项目中添加tc库,操作步骤也简单: 右键“项目管理-**项目名字” 添加,现有文件(E) 按实际位置,选择以前封装好的tc库。这样就能调用tc库里面的函数。 // 用同样的方法 可以封装: “字符串库.t” “大漠库.t” “内存库.t” “汇编库.t” 一次编写,多次调用。这可不是吹出来的。 学习易语言的程序集,VC++的程序集,同样可以用这方法 封装函数,构造代码框架。 使代码 一次编写,多次调用。 编程是懂一而懂百,触类旁通的。 本贴记录在:tc简单开发吧,精品区8,项目归类。
查询精易模块 子程序。 查询精易模块 子程序: 点击 最左侧的程序,模块引用表。 双击精易模块5.23,在新窗口查看类目录,类_识图 ======================================================= 精易子程序 子程序 图片_屏幕截图,字节集,公开 参数 :屏幕宽度 整数型 参数 :屏幕高度 整数型 参数 :图片位数 整数型 可空,这里支持4 824 32 默认是24位图! 子程序 图片_屏幕区域截图,字节集,公开 参数 :欲截取的左边,整数型 参数 :欲截取的顶边,整数型 参数 :欲截取的宽度,整数型 参数 :欲截取的高度,整数型 ’双头硬件盒子。上面两个子程序,从被控机截图后,把字节集 发送给主控机。 ======================================================= 子程序 取出位图数据,字节集,公开,返回位图文件数据(写到文件后就是. BMP图片) 类_识图 子程序名:找图_从字节集 在位图数据中 查找图片(返回找到的图片中心坐标,找不到返回-1坐标),BUG命令谨慎使用 返回值类型:精易坐标 参数<1>的名称为“范围图片”,类型为“字节集”。注明:默认为上次范围图片。 参数<2>的名称为“目标图片”,类型为“字节集”。注明:默认为上次目标图片。 ======================================================= ’双头硬件盒子。主控机接收到字节集,调用类函数 :找图_从字节集() 参数1,写从被控机传来的字节集。 参数2,写从取出位图数据() 得到的字节集。
鼠键类。按目标键就开始执行,按另一键就终止 鼠键类。按目标键就开始执行,按另一键就终止 BeiYuPolaris : 出来个人,帮我把这个问题解决了 就是 按下一个热键,会执行一系列的键盘鼠标操作。 然后在执行过程中按某个按键,就直接终止 按了热键,会执行一系列的键盘操作 我的意思是,比如说按E键,执行下面代码: 键盘按键(73) 等待(500) 键盘按键(75) 等待(500) 键盘按键(74) 然后在这个执行过程中,不管代码 运行到哪一行,按A键就直接停止执行,后面的操作就不出来了。 ======================================================= var hThread1, run1 var hThread2, run2, bool 功能 执行1() var 按键码 = 69 //69是E. while(run1) //主循环. var code=keywait() if(code == 按键码) traceprint("E键已经按一次。") bool = 线程获取状态(hThread2) if(bool == 0) run2 = 1 hThread2 = 线程开启("执行2", "") end 键盘按键(73) 等待(500) 键盘按键(75) 等待(500) 键盘按键(74) end // sleep(100) end //主循环结束. 结束 功能 执行2() var 按键码 = 65 //65是A. while(run2) //主循环. var code=keywait() if(code == 按键码) traceprint("A键已经按一次。") //结束线程1. run1 = 0 sleep(100) 线程关闭(hThread1) //重开线程1. run1 = 1 hThread1 = 线程开启("执行1", "") break //跳出主循环. 结束线程2. end sleep(100) end //主循环结束. 结束 功能 启动_热键() bool = 线程获取状态(hThread1) if(bool == 0) run1 = 1 hThread1 = 线程开启("执行1", "") end 结束 功能 终止_热键() run1 = 0 线程关闭(hThread1) run2 = 0 线程关闭(hThread2) 结束 ======================================================= 新建一个tc项目,F8,F9热键不要删除。 把上面代码,全部覆盖进去 F5调试。 F8启动脚本, 按E键,键盘按键 就出来了。 按A键,就停止了,还用怎测试??
大漠插件的使用方法. 大漠插件的使用方法。 插件注册: 新建一个tc项目,点击IDE左上角__的"项目管理",右键"资源",插入资源(I),把dm.dll添加到资源目录。 注册插件("rc:dm.dll", 真) //一句代码就可以. 插件调用: var dm0 //定义全局变量,用来存放大漠对象。 这里使用dm0,其实用dm,dmdm,dm10也是可以的. dm0 = com("dm.dmsoft") //创造com口的大漠对象。执行这句代码之后,全局变量_dm0,就带有大漠类的全部属性. //"dm.dmsoft" 是什么意思? 懂编写COM接口DLL的人知道,dm是库名,dmsoft是在库中建立的类名 var 版本号 = dm0.ver() messagebox(版本号) dm0.MoveTo(30,30) sleep(30) dm0.RightClick() 游戏公司 在制作游戏时,如果使用DX软件 绘制的游戏,必须使用大漠/天使/乐玩的dx模式。 按键精灵/ tc简单开发 后台模式无效。 DX窗口的3D游戏,后台只接受dx端口的输入。包括dx图色,dx鼠标,dx键盘。 注册大漠之后,可以做找图,找色,识字,找字,,按鼠标,按键盘等操作。 var path = 获取资源路径("rc:") var dm_ret = dm0.SetPath(path) //把tc的资源路径,设置为 大漠.全局路径() 大漠找图。 点击IDE左上角__的"项目管理",右键"资源",插入资源(I),把脚本用到的东西,全部添加到资源目录。(例如 bmp图片,txt字库,第三方dll) var intx, inty, dm_ret dm_ret = dm0.FindPic(0, 0, 1024, 768, "tc.bmp", "000000", 0.9, 0, intx, inty) if(intx > 0 && inty > 0) dm0.MoveTo(intx, inty) sleep(50) dm0.LeftClick() end 大漠识字。 为每个txt字库设定编号。取值为0-9,大漠最多支持10个字库。 dm_ret = dm0.SetDict(0,"字库0.txt") dm_ret = dm0.SetDict(1,"字库1.txt") dm_ret = dm0.SetDict(2,"字库2.txt") dm_ret = dm0.SetDict(3,"字库3.txt") dm_ret = dm0.UseDict(0)//激活需要使用的字库。参数1是字库编号. var str = dm0.Ocr(0,0,1024,768,"9f2e3f-000000",1.0) messagebox(str) 大漠插件,拥有最方便,最强大的是窗口绑定功能,一键前台变后台。 绑定方法: var dm0, run 功能 执行() var hwnd0, dm_ret //局部变量. 注册插件("rc:dm.dll", 真) dm0 = com("dm.dmsoft") hwnd0 = dm0.GetMousePointWindow() //获取鼠标所在的窗口句柄. dm_ret = dm0.BindWindow(hwnd0,display,mouse,keypad,mode) //接着写代码,后台运行要绑定窗口. //有些窗口,需要先激活窗口再绑定(或者绑定以后再激活), //有些窗口,在绑定之后 需要 等待(2000),否则绑定无效。 run = 1 while(run) //主线程任务。 dx模式比较花费时间,代码和代码之间,至少要留有 sleep(10),否则操作无效。 end dm_ret = dm0.UnBindWindow()//解除绑定. 结束 //功能结束. ======================================================= 大漠插件下载: QQ群:  ,群文件,大漠插件。 QQ群:  ,群文件,大漠插件。
易语言,为什么易语言值得一学 过来人说说,为什么易语言值得一学 封隔的心 : 从小就喜欢编程,试过自学C,C++。C#。虽然自问很努力了,但不管看教程看书,每次坚持不了几小时就想死。因为完全听不懂。直到某一天发现了易语言。 记得教程第一课就是窗口程序,好像是红绿灯还是计算器。 第一回就成了,那兴奋的感觉现在还记得,然后一头扎进去很久很久,几乎看光了所有教程,上班时没事干就下载源码研究。 昨天买个新电脑,鬼使神差的装了个VS2015. 看了几个C语言和C#教程,惊讶的发现以前让人懵逼的理论,词汇。居然都能秒懂了。 一口气看了二十多集的理论视频才发现自己没疯,居然人没疯。还天杀的记了满满一本笔记。 易语言的教程对于基础理论介绍的不多,但在大量实际运用中让我不知不觉中领会了许多概念性的东西。 以前在易语言中常用到但不理解的,看了C语言视频后就会有一种“原来如此”的感觉。 我是个自学的野路子,不会什么高**术语。 简单的说看了一天视频我决定从头学习C#, 主要因为和易语言更相似,容易上手,而且在易语言里最常用变量,函数,运算符等等,看C#视频也能学会不少新知识。 坚持自学编程真的是不容易,如果没有易语言我想编程对我来说只是个梦想。对于自学者来说易语言是个好的起点,或许相比其他语言有些许不足和不便, 但它能给予自学新人持续自学,钻研的自信和动力。 仅已此文送给吧里正在学习的新人们。
首页 1 2 3 4 5 下一页