TC官方合作论坛

 找回密码
 立即注册
查看: 6529|回复: 22

[其他] 让TC支持<<指针操作>> . 使用TLL封装. 使TC支持更多windows32 API

  [复制链接]
发表于 2014-6-29 12:20:52 | 显示全部楼层 |阅读模式
本帖最后由 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

评分

参与人数 2威望 +20 金币 +20 收起 理由
超自然 + 10 + 10 很给力!
rainshine + 10 + 10 二漠大神~其实我也有个自己写的小小的内存.

查看全部评分

回复

使用道具 举报

发表于 2014-6-29 12:46:28 | 显示全部楼层
新手暂时没看懂,留着慢慢看。
回复 支持 反对

使用道具 举报

发表于 2014-6-29 12:57:30 | 显示全部楼层
支持  收藏了
回复 支持 反对

使用道具 举报

发表于 2014-6-29 12:58:44 | 显示全部楼层
亲 就一篇介绍额 tll呢
回复 支持 反对

使用道具 举报

发表于 2014-6-29 13:01:40 | 显示全部楼层
二莫大叔又来了
回复 支持 反对

使用道具 举报

发表于 2014-6-29 13:38:53 | 显示全部楼层
二漠的,必须顶
回复 支持 反对

使用道具 举报

发表于 2014-6-29 13:40:43 | 显示全部楼层
哇~大神终于又来发帖子了。{:soso_e113:}
回复 支持 反对

使用道具 举报

发表于 2014-6-29 13:41:24 | 显示全部楼层
顶起顶起啊~
回复 支持 反对

使用道具 举报

发表于 2014-6-29 13:55:10 | 显示全部楼层
11111111111111111111
回复 支持 反对

使用道具 举报

发表于 2014-6-29 14:19:52 | 显示全部楼层
{:soso_e103:}        顶
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-5-5 18:35 , Processed in 0.048735 second(s), 24 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表