|
本帖最后由 alukaduo09 于 2014-7-12 16:43 编辑
TLL内的关键子 em.公用变量[] em.取变量指针(,) em.公用变量指针[] 与 em.数据初始化()
TLL使用4.310b 版本编译 也就是当前发表帖子时间的 TC最新版本
公用变量 与 公用变量指针 的数组大小为 500个 也就是下标 0 到 499
功能 初始化()
线程.开启("em.数据初始化",1000)
//看字面意思你们都懂大概在做什么了.
//函数无返回值 参数为延迟初始化的的毫秒时间
//初始化下面使用最后设置1-3秒的延迟
//为什么要等待一会呢. 因为程序启动的时候有时候变量还未分配好自己应有的位置.
//所以要等待程序完全运行成功才可以去申请自己的变量空间. 如果是程序已经启动好了的话就直接填 1毫秒就可以了.
功能结束
功能 开始_点击()
//使用调用示例: 1
//调用 MessageBox 因为TC的字符串存储的方式为Unicode字符串 Windows系统API关于带有字符串操作的都分为 A 与 W
//例如说 : MessageBoxA 与 MessageBoxW 下面请看例子:
//=============================================================================================\\
em.公用变量[0]="TC你好"
em.公用变量[1]="em"
//定义两个字符串缓冲区 作为"MessageBox函数内的必要参数! 这个其实就是跨空间传变量
内容指针=em.取变量指针(0)
//然后通过我封装的函数得到刚才你定义的缓冲区的指针. 注意 ! 字符型必须使用 em.取变量指针(数组下标) 来取到指针
标题指针=em.取变量指针(1)
dllcall("user32.dll","int","MessageBoxW","int",0,"int",内容指针,"int",标题指针,"int",0)
//==============================================================================================\\
//为了使用方便我还特意使用了一个数组存放了 em.公用变量 的全部指针 ==> em.公用变量指针
//但是如果你定义的字符型的数据的话就不能直接使用这里面的指针. 因为字符串的长度是无法预
//测的, 因此字符串在内存中都是以指针指向的方法来传参.如果你定义的 "不是字符型" 的数据可以这样调用 !
//下面是使用另外一个存放指针的数组的使用方法 数组的定义为 em.公用变量指针[对应变量的下标]
功能结束
功能 退出_点击()
////例子 :2
窗口句柄=窗口.自身句柄()
//获得自己的窗口句柄给下面用
em.公用变量[2]=null
//先定义一个4字节的变量给下面的函数用
线程ID=dllcall("user32.dll","int","GetWindowThreadProcessId","int",窗口句柄,"int",em.公用变量指针[2])
//"GetWindowThreadProcessId 的参数2为一个装载进程PID的指针缓存 .这里我们用到了em.公用变量指针[2]作为缓存区
//////--------------------------------------------------
//////当然你可以自己申请个 例如说下面的
//////空内存=dllcall("kernel32.dll","int","VirtualAlloc","int",0,"int",4,"int",#1000,"int",#40) //申请个可读写执行的内存
//////线程ID=dllcall("user32.dll","int","GetWindowThreadProcessId","int",窗口句柄,"int",空内存) //将自己申请的内存存放进程PID
//////PID=进程.读4byte(进程.获取进程句柄(窗口.得到标题(窗口.自身句柄())),空内存) //读取申请的内存里面的数值
//////这样看上去很麻烦,推荐使用我封装好的函数来取指针缓存的内容.
//////----------------------------------------------------
PID=em.取变量指针(2,1)
//em.取变量指针有第二个参数 ,第二个参数默认为0 , 可不填写 . 如果参数2为 1 那么就是取 "使用指针作为返回内容" 的方法!
//函数的返回值为指针内的内容 但是我要推荐使用下面的方法.
进程PID=em.公用变量[2]
//经过使用 em.取变量指针 之后em.公用变量[2]也就是指针缓存所指向的进程PID了 .如果之前没有经过 em.取变量指针(2,1) 这里的值为 空
进程句柄=进程.信息(进程PID,2)
//将PID转换成进程句柄给下面的申请内存API使用
申请的内存地址=dllcall("kernel32.dll","int","VirtualAllocEx","int",进程句柄,"int",0,"int",4,"int",#1000,"int",#40)
//这个API返回了申请好可读写执行的内存首址. 申请大小为4 但是这个形式的默认在内存里给你分配为#1000字节的大小也就是一个分页4096
//申请的空内存留给下面的函数做测试
em.公用变量[3]=123456
//下面我们向我们申请的内存首址写入整数十进制 123456
是否成功=dllcall("kernel32.dll","int","WriteProcessMemory","int",进程句柄,"int",申请的内存地址,"int",em.公用变量指针[3],"int",4,"int",0)
//这里向我们的内存里面写入了数据
调试输出(进程.读4byte(进程句柄,申请的内存地址))
//测试一下读取我们写入的数据是否正确 .
功能结束
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
评分
-
查看全部评分
|