[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 【第三方】CAPI 注入版【1.2 1D910】

第三方命令行工具 CAPI
让批处理调用API
Made By Defanive

11/04/12:更新1.2, Build 1D910, x32

目录
2L 开发手记
3L 第三方信息
4L 方法列表
5L 方法示例
6L 开发范例

http://bcn.bathome.net/s/tool/index.html?key=CAPI
3

评分人数

    • ht河豚: 体积小技术 + 1
    • cjiabing: 看到那精致的画面和流畅的运行我不由得激动 ...PB + 12 技术 + 3
    • cutebe: 才,6楼CPU占用也不高技术 + 1
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

回复 64# tmplinshi
确实无法使用,打开CAPI报错

TOP

高手啊,下载来学习一下,感谢分享!

TOP

defanive 发表于 2012-9-30 09:40
但是,批处理可以判断自己是否在64位系统中,然后启动32位的cmd.exe,这样CAPI也可以运行在64位的系统中
没有测试环境,无法确定是否运行正常


win7 64 位系统用 32 位 cmd.exe 无法运行。

TOP

回复 58# defanive


    已经很久没更新,新的系统希望可以支持下,毕竟win8,8.1,10都开始普及了
希望可以兼容8.1或10

TOP

有教程么??本人压根不知API

TOP

支持~~顶顶~~~安心大巴

TOP

.很强大 ...有没有开源.
非常批处理3群:56794763
有偿写程序.
批处理, lua, c, c++, vba, php, css

TOP

强!!
之前看到你的CAPI,就希望谁能做个 注入版,没想到真出来了
而且这么强大!!

TOP

更新:1.2, Build 1D910, x32
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

回复 56# 3dnowex
麻烦的在于不同版本的cmd函数地址也不一样,不方便做判断
cmd没有一个开放给外界的接口,很蛋疼 = =
感觉走到最后都只能走回API Hook的路上
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

回复 55# defanive
新手od断ReadConsole跟了下XP的cmd.exe下运行set /a,发现进入到4AD05A42处的内函数中有个字符串的比较(/a /p),这里是否能做些手脚实现set /capi或者set /c这样的功能呢?

TOP

回复 53# netbenton
我很喜欢返回变量名的想法,但是暂时似乎没有办法做到
set语句的处理是在cmd内部进行的,处理完最后再调用SetEnvironmentVariableW
所以除非有办法找到处理set的代码位置,不然都没办法做任何处理
对于多行命令同时执行的话,我认为没什么必要
这种多个命令同时执行是普通第三方遗留下来的传统
普通的第三方是启动新进程,因此启动进程的时间远远大于实际执行代码的时间
所以说把多行代码合并在一起就可以省去启动进程的时间
但是CAPI是基于注入的,所以说实际上跳转到钩子函数的耗时基本上非常少(我本机测试,20000条set命令,加了钩子只比不加钩子慢了0.06s)
所以说这样对速度的提升并没有很显著的效果
直接set CAPI=xxx&set CAPI=yyy基本上就可以做到一样了(虽然看起来稍微难看一点)
返回变量名是一个很好的想法,以为很直接的省去了set xxx=%CAPI_Ret%这一行命令
但是杯具的是貌似没办法做成set /CAPI ret_var=xxx的语法
最多可以做成set CAPI=ret_var xxx,但是这样大改语法结构了
总之谢谢建议,对于CAPI的语法调用问题我还是觉得很蛋疼,已经尽量尝试做到最好了
目前大致的结构是set CAPI=[主类] [子类] [标识符][参数1] [标识符][参数2] ...
将命令分成主类和子类是为了减少程序员的记忆量,也让代码容易阅读
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

netbenton的想法很好的说,但是如果set 的字串太多,也会影响效率的吧

TOP

本帖最后由 netbenton 于 2012-10-13 11:56 编辑

有个提议,语法能不改成这样:
set /capi 返回变量名1=[功能] [参数1] [参数2]…… [参数N]<行结束符>  返回变量名2=[功能] [参数1] [参数2]…… [参数N]<行结束符>   返回变量名3=[功能] [参数1] [参数2]…… [参数N]<行结束符> …………返回变量名N=[功能] [参数1] [参数2]…… [参数N]<行结束符>

PS:
1.也就是返回值直接存到指定变量,并且,一个set /capi 执行了多行capi命令~;
这样不但可以提速,有些情况还可以免受干扰,对需要多个api调用才能成完成的功能,更是有利
甚至“返回变量名2” 做成可以直接是用户的内存地址,即有些临时的api调用,没必要存到cmd 的环境变量。

2.如果某个调用语句很长时用变量,拼接法即可:

set 语句= 返回变量名1=[功能] [参数1] [参数2]…… [参数N]<行结束符>
set 语句=%语句% 返回变量名2=[功能] [参数1] [参数2]…… [参数N]<行结束符>
set 语句=%语句% 返回变量名3=[功能] [参数1] [参数2]…… [参数N]<行结束符>
……
set /capi %语句% 返回变量名N=[功能] [参数1] [参数2]…… [参数N]<行结束符>

TOP

返回列表