TC官方合作论坛

标题: 【批处理】匿名管道,执行CMD命令返回 回显内容。(源码) [打印本页]

作者: 剑仙十号    时间: 2017-10-6 12:03
标题: 【批处理】匿名管道,执行CMD命令返回 回显内容。(源码)
本帖最后由 剑仙十号 于 2018-3-22 20:29 编辑

【批处理】匿名管道,执行CMD命令返回 回显内容。(源码)

var 线程ID
功能 执行()
变量 str
str = PipeCmd("cmd /c date 2017-10-05")
str = PipeCmd("cmd /c time 10:10:10")
str = PipeCmd("cmd /c ipconfig")
调试输出("内网ip:" & str)
str = PipeCmd("cmd /c dir c:")
调试输出("遍历结果:" & str)
//
结束

功能 启动_热键()
var bool = 线程获取状态(线程ID)
if(bool == false)
  线程ID = 线程开启("执行", "")
end
结束
功能 终止_热键()
  线程关闭(线程ID)
结束

【批处理】匿名管道,执行CMD命令返回 回显内容。(编写原理)

作者: 剑仙十号    时间: 2017-10-6 12:04
//匿名管道_定义部分
//用管道执行_批处理命令。禁止执行带交互的命令,可能会卡死。
//cmdstr         执行的命令
//time_out        命令执行的超时时间,防止卡死
function PipeCmd(cmdstr, time_out = 51000)
var sa = SECURITY_ATTRIBUTES()
sa["nLength"]["value"] = structlen(sa)
sa["bInheritHandle"]["value"] = true
//创建管道
var hRead, hWrite
if(!CreatePipe(hRead, hWrite, sa, 0))
  traceprint(getlasterror(1))
  traceprint("创建管道失败")
  return ""
end
var si = STARTUPINFO()
var pi = PROCESS_INFORMATION()
si["cb"]["value"] = structlen(si)
GetStartupInfo(si) //引用传参.
si["hStdError"]["value"] = hWrite
si["hStdOutput"]["value"] = hWrite
si["wShowWindow"]["value"] = 0
si["dwFlags"]["value"] = #00000101
//创建进程 与管道相关联
if(!CreateProcess(0, cmdstr, 0, 0, 1, 0, 0, 0, si, pi))
  traceprint(getlasterror(1))
  traceprint("创建进程失败")
  return ""
end
CloseHandle(hWrite)
var nSize = 1024
var buffer = new(1024)
memset(buffer, 0, 1024 + 1)
var nReadSize = 0
var string
var time1 = gettickcount()
while(ReadFile(hRead, buffer, 1024, nReadSize, 0))
  //内存溢出
  if(nReadSize > 1024)
   break
  end
  //超时
  var time2 = gettickcount()
  if(time2 - time1 > time_out)
   break
  end            
  string = string & addressvalue(buffer, "char *")
  sleep(1, 0)
  memset(buffer, 0, 1024 + 1)
end
delete(buffer) //之前漏掉了这处代码,程序有内存泄漏
CloseHandle(hRead)
return string
end
作者: 剑仙十号    时间: 2017-10-6 12:05
//win32_api定义部分。
//申请内存地址
function new(nSize)
var string = array()
string["str"] = array("char" = nSize + 1, "value" = "")
return structmalloc(string)
end
//释放内存
function delete(address)
structfree(address)
end
//重置一段内存中值
function memset(address, value, nSize)
return dllcall("kernel32.dll", "long", "RtlFillMemory", "long", address, "long", nSize, "long", value)
end
function SECURITY_ATTRIBUTES()
var sa0 = array() //定义SECURITY_ATTRIBUTES结构.
sa0["nLength"] =         array("long" = 1, "value" = 0)
sa0["lpSecurityDescriptor"] =         array("long" = 1, "value" = 0)
sa0["bInheritHandle"] =                 array("long" = 1, "value" = 0)
return sa0
end
function STARTUPINFO()
var si0 = array() //定义STARTUP_INFO结构.
si0["cb"] =                         array("long" = 1, "value" = 0)
si0["lpReserved"] =         array("long" = 1, "value" = 0)
si0["lpDesktop"] =         array("long" = 1, "value" = 0)
si0["lpTitle"] =                 array("long" = 1, "value" = 0)
si0["dwX"] =                         array("long" = 1, "value" = 0)
si0["dwY"] =                         array("long" = 1, "value" = 0)
si0["dwXSize"] =                 array("long" = 1, "value" = 0)
si0["dwYSize"] =                 array("long" = 1, "value" = 0)
si0["dwXCountChars"] = array("long" = 1, "value" = 0)
si0["dwYCountChars"] = array("long" = 1, "value" = 0)
si0["dwFillAttribute"] = array("long" = 1, "value" = 0)
si0["dwFlags"] =                 array("long" = 1, "value" = 0)
si0["wShowWindow"] =         array("short" = 1, "value" = 0)
si0["cbReserved2"] =         array("short" = 1, "value" = 0)
si0["lpReserved2"] =         array("long" = 1, "value" = 0)
si0["hStdInput"] =         array("long" = 1, "value" = 0)
si0["hStdOutput"] =         array("long" = 1, "value" = 0)
si0["hStdError"] =         array("long" = 1, "value" = 0)
return si0
end
function PROCESS_INFORMATION()
var pi0 = array() //定义PROCESS_INFORMATION结构.
pi0["hProcess"] =         array("long" = 1, "value" = 0)
pi0["hThread"] =         array("long" = 1, "value" = 0)
pi0["dwProcessId"] = array("long" = 1, "value" = 0)
pi0["dwThreadId"] = array("long" = 1, "value" = 0)
return pi0
end
//创建管道
function CreatePipe(&readPipe, &writePipe, &lpPipeAttributes, nSize)
return dllcall("kernel32.dll", "long", "CreatePipe", "plong", readPipe, "plong", writePipe, "pstruct", lpPipeAttributes, "long", nSize)
end
//返回当前进程,在启动时,被指定的STARTUPINFO结构信息.
function GetStartupInfo(&STARTUPINFO) //引用传参.
return dllcall("kernel32.dll", "long", "GetStartupInfo", "pstruct", STARTUPINFO)
end
//创建新进程
function CreateProcess(lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, &lpStartupInfo, &lpProcessInformation)
return dllcall("kernel32.dll", "long", "CreateProcessW", "long", lpApplicationName, "wchar *", lpCommandLine, "long", lpProcessAttributes, "long", lpThreadAttributes, "long", bInheritHandles, "long", dwCreationFlags, "long", lpEnvironment, "long", lpCurrentDirectory, "pstruct", lpStartupInfo, "pstruct", lpProcessInformation)
end
//关闭句柄
function CloseHandle(handle)
return dllcall("kernel32.dll", "long", "CloseHandle", "long", handle)
end
//读文件句柄,可以文件,管理,io这一系列的句柄内容
function ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, &lpNumberOfBytesRead, lpOverlapped = 0)
return dllcall("kernel32.dll", "long", "ReadFile", "long", hFile, "long", lpBuffer, "long", nNumberOfBytesToRead, "plong", lpNumberOfBytesRead, "long", lpOverlapped)
end

作者: lilm36    时间: 2018-3-28 21:56
匿名管道,执行CMD命令返回 回显内容
作者: guozhaoti    时间: 2018-4-1 14:38
PipeCmd
作者: 追寻的梦    时间: 2018-4-3 21:07
222222222222222222222
作者: q979033318    时间: 2018-4-5 12:08

作者: asdhkjhjk    时间: 2018-4-5 16:29
··················
作者: q765758576    时间: 2018-4-9 09:23
取全部模拟器
作者: 清风流水2060    时间: 2018-4-22 23:24

作者: cxmin123456    时间: 2018-5-5 17:46
...............................
作者: y407546712    时间: 2018-5-23 11:03
【批处理】匿名管道,执行CMD命令返回 回显内容
作者: peanut0213    时间: 2018-5-24 14:58
谢谢楼主分享
作者: hujie1005    时间: 2018-5-28 16:11
非常需要这个功能,期待
作者: 61026410    时间: 2018-6-10 17:46
多谢分享
作者: 2018789023    时间: 2018-7-8 17:48
addddddddddddddddd
作者: 2018789023    时间: 2018-7-8 18:08
这个dll放哪里的啊
作者: forever43    时间: 2018-7-14 21:44
222222222222222222222
作者: 蓝骷髅    时间: 2018-7-17 13:35
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
作者: bobo198573    时间: 2018-8-1 11:42
111111111111111
作者: zhangxiaod1    时间: 2018-8-5 16:35
看看是什么东西
作者: qq297329239    时间: 2018-8-8 17:47
呀呀呀呀呀呀晕晕晕晕晕晕晕晕晕
作者: a3220303    时间: 2018-8-13 00:54
学习借用下
作者: tfcpzr97536    时间: 2018-8-27 19:15
说都没说清楚 到底在说什么
作者: ZYZYUANG    时间: 2018-9-1 07:16
CMD命令
作者: sunshadow_ja    时间: 2018-9-4 20:52
666666666666
作者: fhjym    时间: 2018-9-18 09:17
爱爱爱啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
作者: xyn3007    时间: 2018-9-18 11:50
ttp://bbs.tyuyan.net/forum.php?mod=viewthread&tid=69228&mobile=no
作者: buycdkey    时间: 2018-9-18 22:53
阿斯顿发斯蒂芬
作者: 元芳    时间: 2018-9-20 03:14
1111111111111
作者: 88979825    时间: 2018-9-22 17:31
66666666666666666666




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