剑仙十号
外挂工程师
关注数: 19
粉丝数: 442
发帖数: 3,966
关注贴吧数: 96
【变量和数组】表格,二维数组的定义。 【变量和数组】表格,二维数组的定义。 一个表格有6行,每行有9列。 用数组怎样定义? arr = array(6) arr[0]=array(9) arr[1]=array(9) arr[2]=array(9) arr[3]=array(9) arr[4]=array(9) arr[5]=array(9) 以植物大战僵尸为例子。这是定义6行。每个行有9列。 数组赋值有两种方法,先学习方法1,再学习方法2。 追逐 :#喷血 有这样写的吗 稳定。 : 跟C语言的数组,搞混乱了。 TC数组,不用定义数组大小。你可以想象它是无限的,要多少有多少 arr = array() arr[0]=array() arr[1]=array() arr[2]=array() arr[3]=array() arr[4]=array() arr[5]=array()
TC简单开发。大漠绑定的原理。 新手 : 绑定窗口,是不是只有大漠插件才可以啊?TC自带的 没有绑定窗口? 稳定。 : TC也可以绑定,需要自己编写绑定函数。用下面的方法,自定义绑定函数。 TC简单开发。大漠绑定的原理。 COM接口dll 是类库的内容。 dm.BindWindow(窗口句柄, 图色, 鼠标, 键盘, 模式) 绑定,就是在COM接口dll内部,设置4,,5,,个dll 程序集变量。 ======================================================= dll 开始 var 类变量句柄 = 0 var 类变量图色 = "普通前台" var 类变量鼠标 = "普通前台" var 类变量键盘 = "普通前台" var 类变量模式 = "普通前台" //选项有:"普通前台", "window后台", "dx", "dx2" ,默认为 "普通前台" var 绑定 = 0 类函数 BindWindow(窗口句柄0, 图色0, 鼠标0, 键盘0, 模式0) 类变量句柄 = 窗口句柄0 类变量图色 = 图色0 类变量鼠标 = 鼠标0 类变量键盘 = 键盘0 类变量模式 = 模式0 绑定 = 1 结束 //类函数结束 类函数 键盘按键() if(绑定 == 0) 调用普通系统api() end // if(绑定 == 1) if(类变量键盘=="普通前台") //窗口获取座标() //窗口座标转屏幕座标() 调用普通系统api(hwnd, ) elseif(类变量键盘=="window后台") 调用后台系统api(hwnd, ) elseif(类变量键盘=="dx") 调用后台DX函数1(hwnd, ) elseif(类变量键盘=="dx2") 调用后台DX函数2(hwnd, ) end end 结束 //类函数结束 编写其它 鼠标键盘的操作函数,方法类似. ………… ………… dll结束 ======================================================= 安装VS2008。 下载天使插件_源代码。用VC++2008,打开天使源代码,里面有这项内容. http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fbbs.tyuyan.net%2Fforum.php%3Fmod%3Dviewthread%26tid%3D45659&urlrefer=81b1331ab93e6f6a250330228aac2a01 TC简单开发。编写COM接口DLL。 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fbbs.tyuyan.net%2Fforum.php%3Fmod%3Dviewthread%26tid%3D71091&urlrefer=f768cb2c48b076f57e00f81b4423a6af
【变量和数组】二维数组,怎么获取最大下标? 【变量和数组】二维数组,怎么获取最大下标? 最大下标 = 数组大小(数组名) - 1 ======================================================= 一个表格有6行,每行有9列。 用数组怎样定义? arr = array(6) arr[0]=array(9) arr[1]=array(9) arr[2]=array(9) arr[3]=array(9) arr[4]=array(9) arr[5]=array(9) 以植物大战僵尸为例子。这是定义6行。每个行有9列。 数组赋值有两种方法,先学习方法1,再学习方法2。 追逐 :#喷血 有这样写的吗 稳定。 : 跟C语言的数组,搞混乱了。 TC数组,不用定义数组大小。 数组元素,你可以把它想象成无限的,要多少有多少 arr = array() arr[0]=array() arr[1]=array() arr[2]=array() arr[3]=array() arr[4]=array() arr[5]=array() //获取元素0 的最大下标. var 最大下标0 = 数组大小(arr[0]) //获取元素2 的最大下标. var 最大下标2 = 数组大小(arr[2]) ======================================================= 新手 : tc数组这么神奇? 别的语言必须重定义 不然下标越界 稳定。 : 这既是优点 也是缺点。编程逻辑不严谨。 TC这种数组,不支持集合。 懒人办公插件,返回数组是集合。只要调用懒人插件_返回值是数组的函数,TC脚本就会崩溃。 TC5.0 6.0 7.0的数组,不如4.431的科学,其它方面改革进步,数组改革退步了
变量用完后,怎么释放他们所占的内存? 变量用完后,怎么释放他们所占的内存? var str = "fujggugfgjjhdruvfdghddghhgddfhgdfffgjjkutghjjjjjjh" str = "" var a = 78955684268556 a = 0 str = null //用null也行,null代表空. a = null //用null也行,null代表空.
易语言。dx2d支持库 易语言。dx2d支持库
tc简单开发_内存教程,hook技术 tc简单开发_内存教程,hook技术 316996072 (50/500) tc简单开发_基础群: 612661895(60/500) 本群大神众多,新手众多,群文件内_资源海量。希望新手分享出_更多的学习笔记,减少 重复造轮子的时间。 好编程,齐学习,齐进步。
【内存教程】内存操作的好处 【内存教程】内存操作的好处 读取地址的值,代替找图 找色 找字, 调用游戏call,代替按鼠标/按键盘。 内存操作的好处是:适应所有系统,适应所有分辨率,最小化后台操作 网络游戏, 重要数据都储存在服务端; 在客户端,只负责显示。 网络游戏,只能读数据,不能改写数据。 如果客户端和服务器的数据不符,人物就掉线。 var 血量 = 读内存4字节(内存地址) if(血量 < 指定值) //按加血键. end var 座标x = 读内存浮点型(内存地址) var 座标y = 读内存浮点型(内存地址) if(座标x < 指定值 || 座标y > 指定值) call 定点回位() end ======================================================= 不要修改游戏。 不要修改游戏。 不要修改游戏数据。 . 重要的事情说三遍。 游戏是拥有著作权的,脚本作者,不作死就不会死。 在淘宝/简单游平台,月入过万的作者不在少数,成功的脚本作者,坚持绿色辅助路线, 不尝试修改游戏数据。 不轻易修改游戏数据。 做脚本行业的,不作死,就不会死。 读取内存数据,代替找图、找色、识字, 使用找call写call,代替按键盘/按鼠标。 最小化窗口,全后台操作。 内核,过驱动这一块,楼主是取了个巧,请大神代写,再去购买。
【内存教程】内存操作的规律 【内存教程】内存操作的规律 读取地址的值,代替找图 找色 找字, 调用游戏call,代替按鼠标/按键盘。 讲几个内存操作的规律,高手可以忽略过。 1、指针变量,存放的是地址。 新手可以把指针变量,理解成内存地址。 2、硬盘中的东西,叫exe,dll,或文档。 载入内存中的exe, dll,叫模块。 计算机处理到的数据,都必须载入到内存中,才能运行。这样数据就变成两份,硬盘的叫原件,内存中的叫镜像。 修改内存数据,不会写入文件。 写到文件() 命令,才会写入文件。 . 每个分配好的内存地址,都存放着一个数据。 同理,每个数据_都对应着一个内存地址。 读取内存地址,可以得到数值。 通过查找游戏的数据,也可以得到内存地址。 3、 内存地址的值 + 偏移值,等于下一级地址。缩句:数值+数值 = 下一级地址
【内存教程】对内存地址的定位。 查找.游戏基址+偏移, 第一步,用“是什么改写了这个地址”(动态地址) 第二步和后面的步骤,使用“是什么访问了这个地址”(指针地址) . 这是什么原因? 【内存教程】对内存地址的定位。 这道题的题眼,在于定位内存地址。 程序要操作某个内存地址,必先定位到这个地址。只有定位了,才能对它读写。 . 对地址定位,使用 是“什么访问了这个地址。” 对地址写入,使用 是“什么改写了这个地址。”
2^10=1024 2^10=1024
tc找多图,然后用返回值做判断 tc找多图,然后用返回值做判断 //把bmp 添加到rc:目录, 就是资源目录 var ret序号=找图(0,0,500,500,"rc:0.bmp|rc:1.bmp|rc:2.bmp|rc:3.bmp","101010",0.8,0,x,y) if(ret序号 == 0) //代码0 elseif(ret序号 == 1) //代码1 elseif(ret序号 == 2) //代码2 elseif(ret序号 == 3) //代码3 end
如何查看本机登录的QQ,有几个帐号,分明是多少 如何查看本机登录的QQ,有几个帐号,分明是多少 例如我现在电脑有两个QQ再登录,运行软件就能,获取现在登录的有两个,帐号分别是1和2 当我下线时就获取不到了 现在我主要是不知道从哪入手,抓包?还是查文件? crush白羊 : .版本 2 .程序集 窗口程序集1 .子程序 _刷新_被单击 句柄列表框.清空 () QQ地址 = 十六到十 (“Common.dll+497D84”) 取句柄数组 (句柄数组, “QQ.exe”) .计次循环首 (取数组成员数 (句柄数组), 计次) 游戏ID = 取窗口进程ID (句柄数组 [计次]) QQ号 = 读内存整数型 (游戏ID, QQ地址) 句柄列表框.加入项目 (句柄列表框.取项目文本 (句柄列表框.现行选中项) + QQ号, 句柄数组 [计次]) 账号个数.标题 = “窗口数:” + 到文本 (计次) .计次循环尾 () //按钮事件换成时钟
tc。如何记录键盘消息 tc。如何记录键盘消息 就算能记录键盘,也要报毒 我有办法不报毒。 c语言写个壳,或者vbs,bat启动就好
tc。如何记录键盘消息 tc。如何记录键盘消息 就算能记录键盘,也要报毒 c语言写个壳,或者vbs,bat启动就好
建议select,改成swicth 建议select,改成swicth。向C语言靠 swicth(可以是表达式){ case a 执行的代码; break; case b 执行的代码; break; default 上面没有匹配的,就执行这里; } 找C语言当靠山,人气肯定越来越旺
这方案不错。需要新功能,就能向官方订制,不用到处找资料
C++,string类 C++,string类 C++,MFC界面,Cstring类
【变量和数组】二维数组,怎么获取最大下标? 【变量和数组】二维数组,怎么获取最大下标? 最大下标 = 数组大小(数组名) - 1 ======================================================= 一个表格有6行,每行有9列。 用数组怎样定义? arr = array(6) arr[0]=array(9) arr[1]=array(9) arr[2]=array(9) arr[3]=array(9) arr[4]=array(9) arr[5]=array(9) 以植物大战僵尸为例子。这是定义6行。每个行有9列。 数组赋值有两种方法,先学习方法1,再学习方法2。 追逐 :#喷血 有这样写的吗 稳定。 : 跟C语言的数组,搞混乱了。 TC数组,不用定义数组大小。 数组元素,你可以把它想象成无限的,要多少有多少 arr = array() arr[0]=array() arr[1]=array() arr[2]=array() arr[3]=array() arr[4]=array() arr[5]=array() //获取元素0 的最大下标. var 最大下标0 = 数组大小(arr[0]) //获取元素2 的最大下标. var 最大下标2 = 数组大小(arr[2])
【变量和数组】表格,二维数组的定义。 【变量和数组】表格,二维数组的定义。 一个表格有6行,每行有9列。 用数组怎样定义? arr = array(6) arr[0]=array(9) arr[1]=array(9) arr[2]=array(9) arr[3]=array(9) arr[4]=array(9) arr[5]=array(9) 以植物大战僵尸为例子。这是定义6行。每个行有9列。 数组赋值有两种方法,先学习方法1,再学习方法2。 追逐 :#喷血 有这样写的吗 稳定。 : 跟C语言的数组,搞混乱了。 TC数组,不用定义数组大小。你可以想象它是无限的,要多少有多少 arr = array() arr[0]=array() arr[1]=array() arr[2]=array() arr[3]=array() arr[4]=array() arr[5]=array()
【变量和数组】表格,二维数组的定义。 【变量和数组】表格,二维数组的定义。 一个表格有6行,每行有9列。 用数组怎样定义? arr = array(6) arr[0]=array(9) arr[1]=array(9) arr[2]=array(9) arr[3]=array(9) arr[4]=array(9) arr[5]=array(9) 以植物大战僵尸为例子。这是定义6行。每个行有9列。 数组赋值有两种方法,先学习方法1,再学习方法2。 追逐 :#喷血 有这样写的吗 稳定。 : 跟C语言的数组,搞混乱了。 TC数组,不用定义数组大小。你可以想象它是无限的,要多少有多少 arr = array() arr[0]=array() arr[1]=array() arr[2]=array() arr[3]=array() arr[4]=array() arr[5]=array()
文件类。文件对话框(模式,过滤符,父窗口句柄) 文件类。文件对话框(模式,过滤符,父窗口句柄) 函数参数: mode 0:保存文件,1:打开文件,2,选择文件夹 title:如下描述 参数2: 当参数1选择 模式0,或模式1时,参数2要用"||"来结尾。 文件选择类型过滤,"显示内容1|*.txt|显示内容2|*.doc||",显示内容与实际过滤项用"|"隔开,实际过滤项用*.加文件后缀设置,多个用"|"隔开,这样选择文件的时候只会显示指定的项, 这里的举例显示的是只显示.txt文件,与.doc结尾的文件,默认将显示所选目录下所有文件,结尾用"||"双竖线 模式3下的标题描述(非窗口标题),默认无标题 parentHwnd: 父窗口句柄(模式2下有效),弹出的选择文件夹对话框将会属于该窗口,并以模态窗口模式弹出,如不填或是错误的句柄值,将没有父窗口 返回值: 选择路径, 点确定后, 返回选择的路径。 如果直接点关闭或点取消,将返回一个空字符串 英文示例: var path=filedialog(0) 中文示例: 变量 path=文件对话框(0) ======================================================= 新手 : 功能 按钮1_点击() var 路径=文件对话框(0,".txt|*.txt|.doc|*.doc||") 调试输出("路径 :" & 路径) 结束 稳定。 : 运行tc,热键F1_帮助文档,window平台,文件类,文件对话框() 就有详细说明 函数参数: 参数1,模式, 0:保存文件,1:打开文件,2,选择文件夹 参数2: 当参数1选择 模式0,或模式1时,参数2要用"||"来结尾。 例如: var path=文件对话框(1, "||") //这样是显示全部文件 messagebox(path) 例子: var path=文件对话框(1, "显示内容1|*.txt||") //这样是 只显示txt文件 messagebox(path) 例子: var path=文件对话框(1, "显示内容2|*.doc||") //这样是 只显示doc文件 messagebox(path) 参考帮助文档,多测试几次就会了。 填好参数1,参数2,不用理会参数3。参数3是做子界面1,子界面2,子界面3的 ======================================================= 新手 : 你看看我那个代码,有什么问题吗 我测试,有两次是可以的 但是其他几次是执行了 但是没有找到刚才保存的文件 稳定。 :这样写: 功能 按钮1_点击() var 路径=文件对话框(0,".txt|*.txt||") 调试输出("路径 : " & 路径) 结束 如果脚本不稳定,你就重新新建一个脚本,一行行的敲代码进去。 你要敲代码,不要复制代码,特别是: 不要复制 网页的代码, 不要复制 按键精灵代码, 不要复制 大漠帮助文档的代码。 这些代码中,往往带有不可显示字符,使你的脚本,带有不可预知的因素 对程序员来说,不可见的网页字符,是很可怕。一个不可见符号,可以使你浪费半天的纠错时间。 脚本代码是对的,但经常神经错乱,有时执行,有时不执行。群主也是向高手请教,才知道这问题。从此脚本稳如狗 不可见字符,例如:网页上的美元符号 不可见字符,非常可怕 ======================================================= 稳定。 : var path=文件对话框(0, "显示内容1|*.txt||") traceprint(path) 变量 文件句柄=文件创建(path& "text.txt", "读写|共享读|共享写|总是创建") 如果(文件句柄==0) 消息框("文件创建失败") 否则 消息框("文件创建成功") 文件关闭(文件句柄) 结束 ======================================================= 把这些代码,复制到 执行() 按F9测试,再到你刚才选择的路径,寻找 text.txt 新手: 用文件创建() 去保存文件是可行的 稳定。 : 文件对话框() ,作用是获取路径。 所以说,你不懂 文件对话框() ,需要使用的情景模式。 新手 : 但昨天一开始,我没有用文件创建去建立文件,单单只是文件对话框() 去保存一个txt文件也是可行的。 这就很奇怪了 没有这种事。 如果文件本来存在,才可行的 嗯嗯¡ 谢啦
学习方向。编程四大法 学习方向。编程四大法: 流程控制,变量和数组,函数多线程,系统api 之后学习类的三要素: 类的封装,类的继承,类的多态 想学习内存的,必须学习类。 一个纯虚类(基因模块),可以造出无数个 该类的对象。 如植物大战僵尸,一个植物类,可以实例化成 无数植物, 一个僵尸类,可以实例化成 无数僵尸, 一个卡槽类,可以实例化成 10个卡槽, 一个物品类,可以实例化成 无数阳光,金币,银币,钻石, 学完类,你就知道 类变量,怎样生成基址,怎样生成偏移, 类函数(子程序,子函数),怎样生成call 你会造锁,你就会解锁 你会造车,你就会修车 ======================================================= 学完编程四大法,类的三要素,编程就大成了。其它东西不要学,浪费精力 人的精力和时间 是有限的。 有人学了 5,6年按键精灵,还是找图找色 那水平。 找图() 找色() 是封装好的函数,又叫模块。 模块的东西,看几次就会了,不要长期去研究 群主参考 天使插件的源码,也能写一个找图() 找色() 了。 用易语言来说,是创建一个位图对象, bmp.载入("路径") //把bmp加载到内存, bmp.截图(x0, y0, x1, y1) 读取bmp颜色信息(位图),保存到二维数组0。 读取bmp颜色信息(截图),保存到二维数组1。 对比两组bmp数组的信息,再找图,找色。 写完找图() 找色() 函数,编程已经大成。
技能类。时间间隔 技能类。时间间隔 植物大战僵尸中文版, 情况1:卡槽的技能CD,每隔6秒刷新一次。每次刷新后,如何及时使用技能? 情况2:储备了一批 玉米炮/寒冰菇,第一次使用后,为避免浪费资源,下次调用,时间间隔 必须 >= 6000 毫秒. 这两种功能,怎样去实现? //先上代码。 var t0, run 功能 执行() t0 = 获取系统时间() run = 1 while(run) var t1 = 获取系统时间() var tsub =t1 - t0 if(tsub >= 6000) 攻击函数() t0 = 获取系统时间() //重新获取系统时间,储存到t0. end sleep(100) end//while. 结束 功能 攻击函数() // 结束 ======================================================= 举一返三。知一而知百。 第一步:定义一个全局变量,var t0 启动辅助,就获取系统时间,保存到t0 . 第二步:写一个while()循环,里面调用 攻击函数(),用来连续调用技能CD。 攻击函数()下面写,t0 = 获取系统时间() //使用技能后,重新获取系统时间,储存到t0. . 第三步:在调用 攻击函数()之前,先获取系统时间,储存到变量 t1 var tsub = t1 - t0 如果 时间差 >= 6000 毫秒, 才调用 攻击函数() 结束
植吧。寒冰菇放咖啡豆之后,几秒开始冰冻? 植吧。寒冰菇放咖啡豆之后,几秒开始冰冻? 玉米炮点击发炮之后,几秒后才轰炸 目的地点
植吧。轨道理论。 植吧。轨道理论。 第10波,20波用冰。 冰冻小偷,顺便冰冻一大波僵尸。 第1波,12波用核子(坑位:9列下,8列上), 第2波,11波用樱桃辣椒。 因为在冰车关,每隔10波,游戏会清理冰雪道。 第1波,2波无冰雪道, 第11波,12波无冰雪道, 所以在这四波,使用樱桃辣椒,核子。 其它波数,用玉米炮炸,再用寒冰菇冰,…………如此循环。
植物大战僵尸。轨道理论
植物大战僵尸。轨道理论
函数多线程。临界区 函数多线程。临界区 多线程脚本中,临界区有啥作用 TC的临界区,跟易的线程许可区一样? jrflsh : 嗯,线程要进入临界区,需要挂号排队。一个出来了,另外一个线程才能进去。 jimye0526 : CriticalSection,翻译过来就是“临界区”。E的叫法是:进入许可证/许可区 365是的啊 : 临界区是lock,一种锁。避免多个线程,抢夺改写同一个全局变量。例子: var ret序号 功能 线程1() lock for(var i=0; i<10; i++) ret序号 = i end unlock 结束 功能 线程2() lock for(var i=10; i<20; i++) ret序号 = i end unlock 结束 新手 : 在多线程中,两个线程同时查找同一个图片,会卡机吗?多个线程同时查找同一个图片,会卡机吗? 365是的啊: 不会 ======================================================= 稳定。 : //先上代码。 var 句柄, hThread1, hThread2, hThread3 功能 启动_热键() 句柄 = 临界区创建() var bool = 线程获取状态(hThread1) if(bool == 0) hThread1 = 线程开启("线程1", "") hThread2 = 线程开启("线程2", "") hThread3 = 线程开启("线程3", "") end 结束 功能 终止_热键() 线程关闭(hThread1) 线程关闭(hThread2) 线程关闭(hThread3) 临界区删除(句柄) 结束 功能 线程1() 临界区进入(句柄) for(var i=0; i<10; i++) 鼠标移动(*, *) sleep(100) 鼠标左键单击() sleep(100) end 临界区离开(句柄) 结束 功能 线程2() 临界区进入(句柄) for(var i=0; i<10; i++) 鼠标移动(*, *) sleep(100) 鼠标左键单击() sleep(100) end 临界区离开(句柄) 结束 功能 线程3() 临界区进入(句柄) // 临界区离开(句柄) 结束 ======================================================= 稳定。 : TC的临界区,在按键精灵叫互斥体,在易语言叫许可证。 临界区,就是设置一个服务区,线程办理业务,需要挂号排队。避免多个线程,争夺同一资源,使0x********内存地址不能为read. . 用银行业务来举例, 临界区创建(),在银行区域,划分几个服务区(柜台)。 临界区进入(句柄),这句命令包括三个步骤:到银行挂号,等待叫号,办理业务。 临界区离开(句柄),用户离开服务区(柜台)。 临界区删除(句柄),回收系统资源。 . 前台鼠标只有一个。多个线程 绑定同一个游戏窗口,多个线程抢用前台鼠标,线程_临界区就派上用场。相关教程: 【深入浅出篇】第五课 TC线程 【深入浅出篇】第六课 临界区的使用 【深入浅出篇】第七课 消息路由和消息过程
托儿。现在的手游托真多,我被坑了4千。 托儿。现在的手游托真多,我被坑了4千。你们遇到过吗? 速度快见面 : 我就大学生一个,和同学一起玩一款手游。我和我同学一人充了100块钱,玩得好好的。谁知道第二天就来了一个土豪,在游戏里各种揍我们。后来没办法,打不过就得充钱呗!就这样玩了大概半个月的样子。我充了4千,我同学充了两千。直达有一天才知道那个土豪是个托。他因为不听从游戏运营商安排,号被封了。所以开了几个小号在世界聊天上爆内幕。我们知道这些气得不行。 其实游戏里面,并没有那么多土豪,那些充几千几万的大部分都是托。他们充值全是游戏运营商发放的,托号玩家不用花一分钱。游戏运营商每天给托号发放500-1000的充值,要求他们去游戏里刺激玩家消费。 我同学了解这些后,就想当托。不用再花钱充值玩游戏了。他到处寻找当托的渠道,花了半个月时间。终于在维信公众号《游神天堂》内拿到个托号。他也就帮游戏运营商当了两个月的托,游戏运营商给他号上发放了2w多充值。还有2000多块钱的奖金。 后来我也去看了一下,发现现在不止几款游戏有托。除了竞技类型的游戏,基本上所有游戏都有托号。所以大家以后玩游戏留个心眼吧! http://tieba.baidu.com/p/5911550634 请给我治疗 : 楼主这个托 bd888wp : 么得,现在打广告的,都是博士后了吗?打得这么有水平 bd888wp : 么得,现在打广告都是博士后了吗?打的这么有水平
函数多线程。临界区技术ex 函数多线程。临界区技术ex //先上代码。 var hThread1, hThread2, hThread3 var handle, hwnd0, hwndex 功能 线程1() 临界区进入(handle) for(var i = 0; i < 4; i++) 窗口提交字符串(hwndex, "线程1:" & i & "\r\n") sleep(1000) end 临界区离开(handle) 结束 功能 线程2() 临界区进入(handle) for(var i = 0; i < 4; i++) 窗口提交字符串(hwndex, "hello world:" & i & "\r\n") sleep(1000) end 临界区离开(handle) 结束 功能 线程3() 临界区进入(handle) for(var i = 0; i < 4; i++) 窗口提交字符串(hwndex, "my god:" & i & "\r\n") sleep(1000) end 临界区离开(handle) 结束 功能 启动_热键() handle = 临界区创建() cmd("Notepad", 真) //真为前台打开,假为后台打开。 sleep(1000) hwnd0 = 窗口查找("无标题 - 记事本", "Notepad") hwndex = 窗口查找子窗口(hwnd0, "", "Edit") sleep(20) var bool = 线程获取状态(hThread1) if(bool == 0) hThread1 = 线程开启("线程1", "") hThread2 = 线程开启("线程2", "") hThread3 = 线程开启("线程3", "") end 结束 功能 终止_热键() 线程关闭(hThread1) 线程关闭(hThread2) 线程关闭(hThread3) 临界区删除(handle) 结束 //临界区进入(handle),临界区离开(handle) 注释掉,程序执行只需要4秒。对记事本写入一团糟。 //保留 临界区进入(handle),临界区离开(handle) ,程序运行需要12秒。对记事本写入条条理理。
函数多线程。临界区技术 函数多线程。临界区技术 //先上代码。 var handle, hThread1, hThread2 功能 线程1() 临界区进入(handle) for(var i = 0; i < 4; i++) traceprint("线程1:" & i) sleep(1000) end 临界区离开(handle) 结束 功能 线程2() 临界区进入(handle) for(var i = 0; i < 4; i++) traceprint("hello world:" & i) traceprint("my god:" & i) sleep(1000) end 临界区离开(handle) 结束 功能 启动_热键() handle = 临界区创建() var bool = 线程获取状态(hThread1) if(bool == 0) hThread1 = 线程开启("线程1", "") hThread2 = 线程开启("线程2", "") end 结束 功能 终止_热键() 线程关闭(hThread1) 线程关闭(hThread2) 临界区删除(handle) 结束 //临界区进入(handle),临界区离开(handle) 注释掉,程序执行只需要4秒。调试输出_写入一团糟。 //保留 临界区进入(handle),临界区离开(handle) ,程序执行需要8秒。调试输出_写入条条理理。
编码。字母和ascii码 的相互转换。 编码。字母和ascii码 的相互转换。 汉字和unicode码 的相互转换。 【字符串类】获取字母的ascii码 var ascii, unicode ascii = 字符串返回字符("A",0) traceprint(ascii) ascii = 字符串返回字符("Z",0) traceprint(ascii) unicode = 字符串返回字符("汉",0) traceprint(unicode) unicode = 字符串返回字符("字",0) traceprint(unicode) 【字符串类】获取ascii码的字母 var 字母 字母 = 字符串格式化("%c",65) traceprint(字母) 字母 = 字符串格式化("%c",90) traceprint(字母) ======================================================= 在tc中,如何随机英文字母? 蔚蓝的天空下 : 随机数,加上a的ascii code,再转成字母 稳定。 : var ascii = 随机数(65, 90) var 字母 = 字符串格式化("%c",ascii) traceprint(字母)
编码。字符和字符编码_的相互转换 编码。字符和字符编码_的相互转换 随机数(#4e00,#9fff) 这个随机数出来的, 有简体,繁体和符号。#是十六进制数。 我只想要简体中文,代码应该怎样写。 var hThread 功能 执行() var 汉字 for(var i = 0; i < 100; i++) 汉字 = 随机7000常用汉字() traceprint(汉字) end 结束 功能 启动_热键() var bool = 线程获取状态(hThread) if(bool == 0) hThread = 线程开启("执行", "") end 结束 功能 终止_热键() 线程关闭(hThread) 结束 功能 随机7000常用汉字() //言术 : 变量 编码1 = 数组(#7684, #4e00, #4e86, #662f, #6211, #4e0d, #5728, #4eba, #4eec, #6709, #6765, #4ed6, #8fd9, #4e0a, #7740, #4e2a, #5730, #5230, #5927, #91cc, #8bf4, #5c31, #53bb, #5b50, #5f97) 变量 编码2 = 数组(#4e5f, #548c, #90a3, #8981, #4e0b, #770b, #5929, #65f6, #8fc7, #51fa, #5c0f, #4e48, #8d77, #4f60, #90fd, #628a, #597d, #8fd8, #591a, #6ca1, #4e3a, #53c8, #53ef, #5bb6, #5b66) 变量 编码3 = 数组(#53ea, #4ee5, #4e3b, #4f1a, #6837, #5e74, #60f3, #751f, #540c, #8001, #4e2d, #5341, #4ece, #81ea, #9762, #524d, #5934, #9053, #5b83, #540e, #7136, #8d70, #5f88, #50cf, #89c1) 变量 编码4 = 数组(#4e24, #7528, #5979, #56fd, #52a8, #8fdb, #6210, #56de, #4ec0, #8fb9, #4f5c, #5bf9, #5f00, #800c, #5df1, #4e9b, #73b0, #5c71, #6c11, #5019, #7ecf, #53d1, #5de5, #5411, #4e8b) 变量 编码5 = 数组(#547d, #7ed9, #957f, #6c34, #51e0, #4e49, #4e09, #58f0, #4e8e, #9ad8, #624b, #77e5, #7406, #773c, #5fd7, #70b9, #5fc3, #6218, #4e8c, #95ee, #4f46, #8eab, #65b9, #5b9e) 变量 编码6 = 数组(#5403, #505a, #53eb, #5f53, #4f4f, #542c, #9769, #6253, #5462, #771f, #5168, #624d, #56db, #5df2, #6240, #654c, #4e4b, #6700, #5149, #4ea7, #60c5, #8def, #5206, #603b, #6761) 变量 编码7 = 数组(#767d, #8bdd, #4e1c, #5e2d, #6b21, #4eb2, #5982, #88ab, #82b1, #53e3, #653e, #513f, #5e38, #6c14, #4e94, #7b2c, #4f7f, #5199, #519b, #5427, #6587, #8fd0, #518d, #679c) 变量 编码8 = 数组(#600e, #5b9a, #8bb8, #5feb, #660e, #884c, #56e0, #522b, #98de, #5916, #6811, #7269, #6d3b, #90e8, #95e8, #65e0, #5f80, #8239, #671b, #65b0, #5e26, #961f, #5148, #529b) 变量 编码9 = 数组(#5b8c, #5374, #7ad9, #4ee3, #5458, #673a, #66f4, #4e5d, #60a8, #6bcf, #98ce, #7ea7, #8ddf, #7b11, #554a, #5b69, #4e07, #5c11, #76f4, #610f, #591c, #6bd4, #9636) 变量 编码10 = 数组(#8fde, #8f66, #91cd, #4fbf, #6597, #9a6c, #54ea, #5316, #592a, #6307, #53d8, #793e, #4f3c, #58eb, #8005, #5e72, #77f3, #6ee1, #65e5, #51b3, #767e, #539f, #62ff, #7fa4) 变量 编码11 = 数组(#7a76, #5404, #516d, #672c, #601d, #89e3, #7acb, #6cb3, #6751, #516b, #96be, #65e9, #8bba, #5417, #6839, #5171, #8ba9, #76f8, #7814, #4eca, #5176, #4e66, #5750) 变量 编码12 = 数组(#63a5, #5e94, #5173, #4fe1, #89c9, #6b65, #53cd, #5904, #8bb0, #5c06, #5343, #627e, #4e89, #9886, #6216, #5e08, #7ed3, #5757, #8dd1, #8c01, #8349, #8d8a, #5b57, #52a0, #811a, #7d27, #7231, #7b49, #4e60, #9635, #6015, #6708, #9752, #534a, #706b, #6cd5, #9898, #5efa, #8d76, #4f4d, #5531, #6d77, #4e03, #5973, #4efb, #4ef6, #611f) 变量 编码13 = 数组(#51c6, #5f20, #56e2, #5c4b, #79bb, #8272, #8138, #7247, #79d1, #5012, #775b, #5229, #4e16, #521a, #4e14, #7531, #9001, #5207, #661f, #5bfc, #665a, #8868, #591f, #6574, #8ba4, #54cd, #96ea, #6d41, #672a, #573a, #8be5, #5e76, #5e95, #6df1, #523b, #5e73, #4f1f, #5fd9, #63d0, #786e, #8fd1, #4eae, #8f7b, #8bb2, #519c, #53e4, #9ed1) 变量 编码14 = 数组(#544a, #754c, #62c9, #540d, #5440, #571f, #6e05, #9633, #7167, #529e, #53f2, #6539, #5386, #8f6c, #753b, #9020, #5634, #6b64, #6cbb, #5317, #5fc5, #670d) 变量 编码15 = 数组(#96e8, #7a7f, #5185, #8bc6, #9a8c, #4f20, #4e1a, #83dc, #722c, #7761, #5174, #5f62, #91cf, #54b1, #89c2, #82e6, #4f53, #4f17, #901a, #51b2, #5408, #7834) 变量 编码16 = 数组(#53cb, #5ea6, #672f, #996d, #516c, #65c1, #623f, #6781, #5357, #67aa, #8bfb, #6c99, #5c81, #7ebf, #91ce, #575a, #7a7a, #6536, #7b97, #81f3, #653f, #57ce) 变量 编码17 = 数组(#52b3, #843d, #94b1, #7279, #56f4, #5f1f, #80dc, #6559, #70ed, #5c55, #5305, #6b4c, #7c7b, #6e10, #5f3a, #6570, #4e61, #547c, #6027, #97f3, #7b54, #54e5) 变量 编码18 = 数组(#9645, #65e7, #795e, #5ea7, #7ae0, #5e2e, #5566, #53d7, #7cfb, #4ee4, #8df3, #975e, #4f55, #725b, #53d6, #5165, #5cb8, #6562, #6389, #5ffd, #79cd, #88c5) 变量 编码19 = 数组(#9876, #6025, #6797, #505c, #606f, #53e5, #533a, #8863, #822c, #62a5, #53f6, #538b, #6162, #53d4, #80cc, #7ec6) // var 随机结果 = 数组(), 大小, unicode 选择(随机数(1, 19)) 条件 1 随机结果 = 编码1 条件 2 随机结果 = 编码2 条件 3 随机结果 = 编码3 条件 4 随机结果 = 编码4 条件 5 随机结果 = 编码5 条件 6 随机结果 = 编码6 条件 7 随机结果 = 编码7 条件 8 随机结果 = 编码8 条件 9 随机结果 = 编码9 条件 10 随机结果 = 编码10 条件 11 随机结果 = 编码11 条件 12 随机结果 = 编码12 条件 13 随机结果 = 编码13 条件 14 随机结果 = 编码14 条件 15 随机结果 = 编码15 条件 16 随机结果 = 编码16 条件 17 随机结果 = 编码17 条件 18 随机结果 = 编码18 条件 19 随机结果 = 编码19 结束 大小 = 数组大小(随机结果) unicode = 随机结果[随机数(0, 大小 - 1)] //在计算机中,每个汉字,都有一个十六进制.unicode编码. //用字符串格式化(), 把参数2的unicode, 转换成参数1格式的字符串. return 字符串格式化("%c", unicode) 结束
编码。汉字Unicode编码范围 编码。汉字Unicode编码范围 字符集字数Unicode 编码 基本汉字20902字4E00-9FA5 基本汉字补充74字9FA6-9FEF 扩展A6582字3400-4DB5 扩展B42711字20000-2A6D6 扩展C4149字2A700-2B734 扩展D222字2B740-2B81D 扩展E5762字2B820-2CEA1 扩展F7473字2CEB0-2EBE0 康熙部首214字2F00-2FD5 部首扩展115字2E80-2EF3 兼容汉字477字F900-FAD9 兼容扩展542字2F800-2FA1D PUA(GBK)部件81字E815-E86F 部件扩展452字E400-E5E8 PUA增补207字E600-E6CF 汉字笔画36字31C0-31E3 汉字结构12字2FF0-2FFB 汉语注音43字3105-312F 注音扩展22字31A0-31BA 〇___________1字____3007 Unicode 是全球文字统一编码。它把世界上的各种文字的每一个字符指定唯一编码,实现跨语种、跨平台的应用。 中文用户最常接触的是汉字 Unicode 编码。中文字符数量巨大,日常使用的汉字数量有数千个,再加上生僻字,数量达到数万个。这个表格将中文字符集的 Unicode 编码范围列出,点击字库条目可见具体字符。 若要查询具体字符的编码,百度搜索:汉字字符集编码查询。
植吧。2759关,测试冰车抗性。 调出全冰车,不用手动操作。
植吧。6花6冰,双猫无炮。 植吧。6花6冰,双猫无炮。 植吧。6花8冰,无炮。 花,曾,冰瓜,大喷,大喷,…… …… …… …… 曾,叶,冰瓜,冰瓜,5曾,6曾,…… …… …… 花,花,冰菇,冰菇,冰菇,猫,曾,曾,曾 花,花,冰菇,冰菇,冰菇,猫,曾,曾,曾 曾,叶,冰瓜,冰瓜,5曾,6曾,…… …… …… 花,曾,冰瓜,大喷,大喷,…… …… …… ……
植吧。2759关
【大漠多线程】每个线程,都得创建一个大漠对象 【大漠多线程】每个线程,都得创建一个大漠对象 每个线程,得使用不同的对象名。 否则 多个线程 使用同一对象名,上一对象名,被新对象名所覆盖,大漠就会出错。程序提示:某内存地址.不能为read. 多个线程绑定同一窗口, 如果有一个线程停止/解绑,绑定这个窗口的所有线程,都全部解绑。
【大漠多线程】每个线程,都得创建一个大漠对象 【大漠多线程】每个线程,都得创建一个大漠对象 每个线程,得使用不同的对象名。 否则 多个线程 使用同一个对象名,上一对象名,被新的对象名所覆盖,大漠就会出错。程序提示:某内存不能为read. 多个线程绑定同一窗口, 如果有一个线程停止/解绑,绑定这个窗口的所有线程,都全部解绑。
【大漠多线程】多个线程,能共用~同一个子函数? 【大漠多线程】多个线程,能共用~同一个子函数? 例如: var 线程ID1,线程ID2 功能 执行(i) while(1) traceprint("我是线程:" & i) sleep(1000) end 结束 功能 启动_热键() var bool = 线程获取状态(线程ID1) if(bool == 0) //为方便理解,不使用for循环. 线程ID1 = 线程开启("执行", 0) 线程ID2 = 线程开启("执行", 1) end 结束 功能 终止_热键() //为方便理解,不使用for循环. 线程关闭(线程ID1) 线程关闭(线程ID2) 结束 ======================================================= 线程由 线程开启(),和线程函数组成。 钩子由 钩子安装(),和钩子函数组成。 线程函数,又叫线程体。 钩子函数,又叫钩子体。 在TC中,函数叫功能,英文名finction。 前台脚本,只有一套鼠标键盘,所以多线程 不能共用~同一个子函数。 后台脚本,它有多套鼠标键盘,互不影响,可以共用~同一个子函数。
植吧。二五路,二机枪改冰瓜,火树改曾。双曾预伤怪群,冰瓜溅伤13路,56路。 二五路,另一机枪改寒冰菇/冰菇模仿者。双冰位镇压小丑。 一六路,机枪减一个,火树后退一步。陆2,3列植物 戴南瓜套。
植物大战僵尸。我就问问: 植物大战僵尸。我就问问: 一次来了12台冰车怎办。 一次来了16只红眼怎办。 一次来了16只小丑怎办。 一次来了12只矿工怎办。 一次来了12台冰车+16只红眼+16只小丑+12只矿工 怎办。
植物大战僵尸。小游戏 雪橇区怎么过 植物大战僵尸。小游戏 雪橇区怎么过 土豆雷,辣椒可以炸雪橇小队。 《孙子兵法》聚焦论:1,2路种花 种地刺 防守住。5,6路先让它狂。 搞好1,2路基础建设,要去料理5,6路。 开局时阳光少,土豆,辣椒,缠绕海草不能少。 地刺,地刺王,也要带上。 开局时,如果土豆雷/窝瓜用完了,可以用除草车清雪橇小队,专心发展经济。到后面的雪橇道,也可以用辣椒清理。 双发豌豆,火树,向日葵,双子叶,荷叶也要带上。 开局时,陆路种植物,勿发展水路。刚开局时,阳光本来就少,荷叶需要25阳光,购买荷叶的钱,积累下来就是大数目,影响开局速度。 这时候,如果不及时发展陆路,还花阳光买荷叶,经济就会滞后,火力配置就会滞后。 到中局时,僵尸一大波一大波的出来,阳光跟不上,火力配置不上,就应付不来。
植物大战僵尸。2381自然灭丑
植物大战僵尸。2381自然灭丑
狙击手被称作战场上的“死亡幽灵”。 狙击手被称作战场上的“死亡幽灵”,这不仅仅是因为他能够在远距离上给敌人以致命一击,更重要的是能够给敌人带来强大的震慑力。在经过长期的战场狙击作战,很多狙击手都总结出了不少的狙击经验,对于在不同的战场环境,通过不同的方式来达到一击必杀的目的。
【系统api】FindWindow() 【系统api】FindWindow() var hThread 功能 执行() var hwnd hwnd = FindWindowA("Notepad", "记录 - 记事本") traceprint(hwnd) hwnd = FindWindowW("Notepad", "记录 - 记事本") traceprint(hwnd) 结束 功能 FindWindowA(class0, title0) return dllcall("user32.dll", "long", "FindWindowA", "char *", class0, "char *", title0) 结束 功能 FindWindowW(class0, title0) return dllcall("user32.dll", "long", "FindWindowW", "wchar *", class0, "wchar *", title0) 结束 功能 启动_热键() var bool = 线程获取状态(hThread) if(bool == 0) hThread = 线程开启("执行", "") end 结束 功能 终止_热键() 线程关闭(hThread) 结束
阴阳双生科技。1974边路攻。
植物大战僵尸。1795中路攻。
获取活动窗口句柄() var hthread 功能 执行() //由于GetActiveWindow()函数,只能获取自身进程的窗口句柄. //所以调用AttachThreadInput()函数,把代码线程,附加到目标进程空间. var hwnd顶层 = GetForegroundWindow() //获得顶层窗口句柄. traceprint("hwnd顶层:" & hwnd顶层) var ProcessId //根据顶层窗口句柄,获取顶层窗口的线程ID var ForeThreadId = GetWindowThreadProcessId(hwnd顶层, ProcessId) var SelfThreadId = GetCurrentThreadId() // var bool = AttachThreadInput(ForeThreadId, SelfThreadId, 1) //附加线程 //讲白话点,把当前线程附加到目标进程空间。 var hwnd活动 = GetActiveWindow() //获取活动窗口句柄 traceprint("hwnd活动:" & hwnd活动) bool = AttachThreadInput(ForeThreadId, SelfThreadId, 0) //取消附加线程 //通过对比句柄,顶层窗口和活动窗口,都是主窗口. 窗口设置位置(hwnd活动, 0, 0) 结束 功能 启动_热键() var bool = 线程获取状态(hthread) if(bool == 0) hthread = 线程开启("执行", "") end 结束 功能 终止_热键() 线程关闭(hthread) 结束 功能 GetForegroundWindow() //获得顶层窗口句柄. return dllcall("User32.dll", "long", "GetForegroundWindow") 结束 功能 GetWindowThreadProcessId(hwnd顶层, &ProcessId) //根据顶层窗口句柄,获取顶层窗口的线程ID return dllcall("User32.dll", "long", "GetWindowThreadProcessId", "long", hwnd顶层, "plong", ProcessId) 结束 功能 GetCurrentThreadId() //获取本身的线程ID return dllcall("kernel32.dll", "long", "GetCurrentThreadId") 结束 // 功能 AttachThreadInput(ForeThreadId, SelfThreadId, bool0) //附加线程 //取消附加线程 return dllcall("User32.dll", "long", "AttachThreadInput", "long", ForeThreadId, "long", SelfThreadId, "long", bool0) 结束 功能 GetFocus() //获取具有输入焦点的窗口句柄 return dllcall("User32.dll", "long", "GetFocus") 结束 功能 GetActiveWindow() //获取活动窗口句柄() return dllcall("user32.dll", "long", "GetActiveWindow") 结束
获取活动窗口句柄() var hthread 功能 执行() //由于GetActiveWindow()函数,只能获取自身进程的窗口句柄. //所以调用AttachThreadInput()函数,把代码线程,附加到目标进程空间. var hwnd顶层 = GetForegroundWindow() //获得顶层窗口句柄. traceprint("hwnd顶层:" & hwnd顶层) var ProcessId //根据顶层窗口句柄,获取顶层窗口的线程ID var ForeThreadId = GetWindowThreadProcessId(hwnd顶层, ProcessId) var SelfThreadId = GetCurrentThreadId() // var bool = AttachThreadInput(ForeThreadId, SelfThreadId, 1) //附加线程 //讲白话点,把当前线程附加到目标进程空间。 var hwnd活动 = GetActiveWindow() //获取活动窗口句柄 traceprint("hwnd活动:" & hwnd活动) bool = AttachThreadInput(ForeThreadId, SelfThreadId, 0) //取消附加线程 //通过对比句柄,顶层窗口和活动窗口,都是主窗口. 窗口设置位置(hwnd活动, 0, 0) 结束 功能 启动_热键() var bool = 线程获取状态(hthread) if(bool == 0) hthread = 线程开启("执行", "") end 结束 功能 终止_热键() 线程关闭(hthread) 结束 功能 GetForegroundWindow() //获得顶层窗口句柄. return dllcall("User32.dll", "long", "GetForegroundWindow") 结束 功能 GetWindowThreadProcessId(hwnd顶层, &ProcessId) //根据顶层窗口句柄,获取顶层窗口的线程ID return dllcall("User32.dll", "long", "GetWindowThreadProcessId", "long", hwnd顶层, "plong", ProcessId) 结束 功能 GetCurrentThreadId() //获取本身的线程ID return dllcall("kernel32.dll", "long", "GetCurrentThreadId") 结束 // 功能 AttachThreadInput(ForeThreadId, SelfThreadId, bool0) //附加线程 //取消附加线程 return dllcall("User32.dll", "long", "AttachThreadInput", "long", ForeThreadId, "long", SelfThreadId, "long", bool0) 结束 功能 GetFocus() //获取具有输入焦点的窗口句柄 return dllcall("User32.dll", "long", "GetFocus") 结束 功能 GetActiveWindow() //获取活动窗口句柄() return dllcall("user32.dll", "long", "GetActiveWindow") 结束
获取具有输入焦点的窗口句柄() var hthread 功能 执行() //由于GetFocus()函数,只能获取自身进程的控件句柄. //所以调用AttachThreadInput()函数,把代码线程,附加到目标进程空间. var hwnd顶层 = GetForegroundWindow() //获得顶层窗口句柄. var ProcessId //根据顶层窗口句柄,获取顶层窗口的线程ID var ForeThreadId = GetWindowThreadProcessId(hwnd顶层, ProcessId) var SelfThreadId = GetCurrentThreadId() traceprint("ProcessId:" & ProcessId) // var bool = AttachThreadInput(ForeThreadId, SelfThreadId, 1) //附加线程 //讲白话点,把当前线程附加到目标进程空间。 var hwnd焦点 = GetFocus() //获取具有输入焦点的窗口句柄 bool = AttachThreadInput(ForeThreadId, SelfThreadId, 0) //取消附加线程 // //对记事本输出信息,要使用窗口发送字符(hwnd焦点, 13) //窗口发送按键(hwnd焦点, 13) 这个无效。 窗口发送字符串(hwnd焦点, "ProcessId:" & ProcessId) 窗口发送字符(hwnd焦点, 13) 窗口发送字符串(hwnd焦点, "hwnd焦点:" & hwnd焦点) 窗口发送字符(hwnd焦点, 13) 结束 功能 启动_热键() var bool = 线程获取状态(hthread) if(bool == 0) hthread = 线程开启("执行", "") end 结束 功能 终止_热键() 线程关闭(hthread) 结束 功能 GetForegroundWindow() //获得顶层窗口句柄. return dllcall("User32.dll", "long", "GetForegroundWindow") 结束 功能 GetWindowThreadProcessId(hwnd顶层, &ProcessId) //根据顶层窗口句柄,获取顶层窗口的线程ID return dllcall("User32.dll", "long", "GetWindowThreadProcessId", "long", hwnd顶层, "plong", ProcessId) 结束 功能 GetCurrentThreadId() //获取本身的线程ID return dllcall("kernel32.dll", "long", "GetCurrentThreadId") 结束 // 功能 AttachThreadInput(ForeThreadId, SelfThreadId, bool0) //附加线程 //取消附加线程 return dllcall("User32.dll", "long", "AttachThreadInput", "long", ForeThreadId, "long", SelfThreadId, "long", bool0) 结束 功能 GetFocus() //获取具有输入焦点的窗口句柄() return dllcall("User32.dll", "long", "GetFocus") 结束 功能 GetActiveWindow() //获取活动窗口句柄() return dllcall("user32.dll", "long", "GetActiveWindow") 结束
获取具有输入焦点的窗口句柄() var hthread 功能 执行() //由于GetFocus()函数,只能获取自身进程的控件句柄. //所以调用AttachThreadInput()函数,把代码线程,附加到目标进程空间. var hwnd顶层 = GetForegroundWindow() //获得顶层窗口句柄. var ProcessId //根据顶层窗口句柄,获取顶层窗口的线程ID var ForeThreadId = GetWindowThreadProcessId(hwnd顶层, ProcessId) var SelfThreadId = GetCurrentThreadId() traceprint("ProcessId:" & ProcessId) // var bool = AttachThreadInput(ForeThreadId, SelfThreadId, 1) //附加线程 //讲白话点,把当前线程附加到目标进程空间。 var hwnd焦点 = GetFocus() //获取具有输入焦点的窗口句柄 bool = AttachThreadInput(ForeThreadId, SelfThreadId, 0) //取消附加线程 // //对记事本输出信息,要使用窗口发送字符(hwnd焦点, 13) //窗口发送按键(hwnd焦点, 13) 这个无效。 窗口发送字符串(hwnd焦点, "ProcessId:" & ProcessId) 窗口发送字符(hwnd焦点, 13) 窗口发送字符串(hwnd焦点, "hwnd焦点:" & hwnd焦点) 窗口发送字符(hwnd焦点, 13) 结束 功能 启动_热键() var bool = 线程获取状态(hthread) if(bool == 0) hthread = 线程开启("执行", "") end 结束 功能 终止_热键() 线程关闭(hthread) 结束 功能 GetForegroundWindow() //获得顶层窗口句柄. return dllcall("User32.dll", "long", "GetForegroundWindow") 结束 功能 GetWindowThreadProcessId(hwnd顶层, &ProcessId) //根据顶层窗口句柄,获取顶层窗口的线程ID return dllcall("User32.dll", "long", "GetWindowThreadProcessId", "long", hwnd顶层, "plong", ProcessId) 结束 功能 GetCurrentThreadId() //获取本身的线程ID return dllcall("kernel32.dll", "long", "GetCurrentThreadId") 结束 // 功能 AttachThreadInput(ForeThreadId, SelfThreadId, bool0) //附加线程 //取消附加线程 return dllcall("User32.dll", "long", "AttachThreadInput", "long", ForeThreadId, "long", SelfThreadId, "long", bool0) 结束 功能 GetFocus() //获取具有输入焦点的窗口句柄() return dllcall("User32.dll", "long", "GetFocus") 结束 功能 GetActiveWindow() //获取活动窗口句柄() return dllcall("user32.dll", "long", "GetActiveWindow") 结束
内存类。dm.ReadInt() 内存类。dm.ReadInt() 函数简介: 读取指定地址的整数数值,类型可以是8位,16位 或者 32位 函数原型: long = ReadInt(hwnd,addr,type) 参数定义: hwnd 整形数: 指定搜索的窗口句柄或者进程ID. 默认是窗口句柄.如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId() addr 字符串: 用字符串来描述地址,类似于CE的地址描述,数值必须是16进制,里面可以用[ ] + -这些符号来描述一个地址。+表示地址加,-表示地址减。模块名必须用<>符号来圈起来 例如: 1. "4DA678" 最简单的方式,用绝对数值来表示地址 2. "<360SE.exe>+DA678" 相对简单的方式,只是这里用模块名来决定模块基址,后面的是偏移 3. "[4DA678]+3A" 用绝对数值加偏移,相当于一级指针 4. "[<360SE.exe>+DA678]+3A" 用模块定基址的方式,也是一级指针 5. "[[[<360SE.exe>+DA678]+3A]+5B]+8" 这个是一个三级指针 总之熟悉CE的人 应该对这个地址描述都很熟悉。 type 整型数。 整数类型,取如下数值。 0 : 32位有符号 1 : 16 位有符号 2 : 8位有符号 3 : 16位无符号 4 : 8位无符号 返回值:整型数。 返回值,是ReadInt()读取到的数值。 如果要想知道函数是否执行成功,请查看GetLastError函数. 示例: var value = dm.ReadInt(hwnd,"4DA678",0) messagebox(value) 参数2的地址,必须是字符串。 参数2的数值,使用16进制数值。 在TC中,参数2的格式,使用 字符串格式化() 来获取。 "使用字符串连接符" & "来拼接"。 示例: //下载dm.dll,并添加到 项目管理,资源。 var address植物, hwnd, dm 功能 植物类() var ret = 注册插件("rc:dm.dll", 真) traceprint("插件。注册情况:" & ret) dm = com("dm.dmsoft") hwnd = dm.FindWindow("", "窗口标题名") if(hwnd == 0) messagebox("窗口未开启。", "提示") end // address植物 = dm.ReadInt(hwnd, "[[006A9EC0]+768]+AC", 0) var 当前植物数量 = dm.ReadInt(hwnd, "[[006A9EC0]+768]+BC", 0) 当前植物数量 = 当前植物数量 + 10 //就算10个植物被连续去掉,处在最后面的植物对象 也能遍历到. // for(var i = 0; i < 当前植物数量; i++) var offset3种类 = #24 + #14C * i //#14C * i为下一个植物对象。i从0--当前植物数量。 var address3种类 = address植物 + offset3种类 var str_address = 字符串格式化("%X", address3种类) var 植物代号 = dm.ReadInt(hwnd, str_address, 0) if(植物代号 == 47) traceprint("植物数组下标:" & i &",转换为16进制:" & 字符串格式化("%X", i)) end end 结束
首页
2
3
4
5
6
7
下一页