TC官方合作论坛

标题: 让TC支持<<指针操作>> . 使用TLL封装. 使TC支持更多windows32 API [打印本页]

作者: alukaduo09    时间: 2014-6-29 12:20
标题: 让TC支持<<指针操作>> . 使用TLL封装. 使TC支持更多windows32 API
本帖最后由 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(进程句柄,申请的内存地址))
    //测试一下读取我们写入的数据是否正确 .
功能结束





[attach]16534[/attach]





作者: a64444679    时间: 2014-6-29 12:46
新手暂时没看懂,留着慢慢看。
作者: jimye0526    时间: 2014-6-29 12:57
支持  收藏了
作者: jimye0526    时间: 2014-6-29 12:58
亲 就一篇介绍额 tll呢
作者: 88979825    时间: 2014-6-29 13:01
二莫大叔又来了
作者: qq462621349    时间: 2014-6-29 13:38
二漠的,必须顶
作者: as128214121    时间: 2014-6-29 13:40
哇~大神终于又来发帖子了。
作者: as128214121    时间: 2014-6-29 13:41
顶起顶起啊~
作者: tatdgfss    时间: 2014-6-29 13:55
11111111111111111111
作者: 如此美丽。    时间: 2014-6-29 14:19
        顶
作者: saina6281    时间: 2014-6-29 15:40
TLL封装. 使TC支持更多win
作者: 续花丶    时间: 2014-6-29 18:28
学习一下.
作者: rainshine    时间: 2014-6-29 18:39
二漠大神~其实我也有个自己写的小小的内存库  也是这原理  自己申请内存空间作为指针。~~好棒~支持支持  tc用这个可以模拟指针
作者: zc317414    时间: 2014-6-29 18:43

作者: alukaduo09    时间: 2014-6-29 19:02
rainshine 发表于 2014-6-29 18:39
二漠大神~其实我也有个自己写的小小的内存库  也是这原理  自己申请内存空间作为指针。~~好棒~支持支持  tc ...

嗯  , 基本用这个更方便一些 .

我实现的原理是定位自己变量的内存地址. 然后让公用变量的数组的值指向那些内容地址  
这样的好处就是不会出现频繁申请内存出现不可预料的稳定性的问题.
其实你如果懂我说的意思的话你自己也可以实现相同的功能,  而且自己封装出来的东西使用更加灵活一些
作者: 策航分享    时间: 2014-6-29 20:30
高深莫测有待研究
作者: rainshine    时间: 2014-6-29 22:22
alukaduo09 发表于 2014-6-29 19:02
嗯  , 基本用这个更方便一些 .

我实现的原理是定位自己变量的内存地址. 然后让公用变量的数组的值指向那 ...

懂得,对c指针了解的比较多,挺熟悉的。谢谢大神指点~
作者: rainshine    时间: 2014-6-29 22:23
我有种预感,此贴必火……
作者: whoyeyang    时间: 2014-6-30 12:10
不明觉厉!
作者: iookk2012    时间: 2014-7-3 05:56
悄悄~~~~~
作者: julele    时间: 2014-8-18 03:14
本帖最后由 julele 于 2014-8-18 03:15 编辑

TC4.33 初始化em会出错.....
能不能把em.tll的源码给分享一下?

作者: 超自然    时间: 2014-8-19 08:34
,好东西,茅塞顿开。。。。
作者: slz336    时间: 2014-8-26 09:03
我回复顶你




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1