开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1125|回复: 3
收起左侧

[已解决] 实时的dos回显,怎么分别拿到多个管道的输出呢?

 关闭 [复制链接]
结帖率:99% (88/89)
发表于 2020-2-15 12:52:10 | 显示全部楼层 |阅读模式   湖北省恩施土家族苗族自治州
20精币
  
变量名类 型静态数组备 注
SECURITY_ATTRIBUTESSECURITY_ATTRIBUTES 
STARTUPINFOSTARTUPINFO_短整数 
PROCESS_INFORMATION_进程结构 
txt字节集 
len整数型 
hWrite整数型 
hRead整数型 
EXIT整数型 
返回值文本型 
临时文本型 
参数整数型1
如果真 (命令行文本 = “”)
返回 (“”)

SECURITY_ATTRIBUTES.nLength = 12
SECURITY_ATTRIBUTES.lpSecurityDescriptor = 0
SECURITY_ATTRIBUTES.bInheritHandle = 1
CreatePipe (hRead, hWrite, SECURITY_ATTRIBUTES, 0)  ' 创建一个CMD匿名管道
STARTUPINFO.cb = 68
STARTUPINFO.dwFlags = 位或 ( #STARTF_USESHOWWINDOW, #STARTF_USESTDHANDLES )
STARTUPINFO.wShowWindow = #SW_HIDE
STARTUPINFO.hStdOutput = hWrite
STARTUPINFO.hStdError = hWrite
如果 (取操作系统类别 () ≤ 2)
_创建新进程_短整数 (0, “command.com /c ” + 命令行文本, 0, 0, 真, 0, 0, 0, STARTUPINFO, PROCESS_INFORMATION)  ' 创建一个新进程,并且设置读写管道,创建成功后,进程会自动再创建一个写管道端口
_创建新进程_短整数 (0, “cmd.exe /c ” + 命令行文本, 0, 0, 真, 0, 0, 0, STARTUPINFO, PROCESS_INFORMATION)  ' 创建一个新进程,并且设置读写管道,创建成功后,进程会自动再创建一个写管道端口

_关闭对象 (hWrite)  ' 因为我们开始已经创建了一个写管道端口,现在进程创键时又自动创键了一个写管道端口,所以应关闭多余的管道写端口
判断循环首 (len ≠ -1)  ' 制造一个无限循环
PeekNamedPipe (hRead, 0, 0, 0, len, 0)  ' 查看管道中是否有xx
如果 (len ≠ 0)
txt = 取空白字节集 (1024)
_读出文件中xx (hRead, txt, 1023, len, 0)  ' 从管道中读取xx
临时 = 取字节集xx (txt, #文本型, )
如果真 (是否为空 (即时回显))
参数 [1]_取指针_文本型 (临时, 临时, 0)
如果真 (_动态调用子程序 ( #动态调用代码, 即时回显, 参数, 1, ))
' ====图片字节集: #动态调用代码 ==== API动态调用子程序
' *** 缩略程序块 ***
' 动态调用代码 =  {85,139,236,86,139,117,16,141,78,255,133,201,124,21,139,69,12,141,4,136,65,139,16,137,85,16,255,117,16,131,232,4,73,117,242,255,85,8,137,69,12,139,69,20,133,192,116,13,141,4,181,0,0,0,0,137,69,16,3,101,16,139,69,12,94,93,194,16,0}
' 【汇编码】:
' push ebp
' mov ebp, esp
' push esi
' mov esi, dword ptr [ebp+10h]
' lea ecx, dword ptr [esi-01h]
' test ecx, ecx
' jl Label1
' mov eax, dword ptr [ebp+0Ch]
' lea eax, dword ptr [eax+ecx*4]
' inc ecx
' Label2:
' mov edx, dword ptr [eax]
' mov dword ptr [ebp+10h], edx
' push dword ptr [ebp+10h]
' sub eax, 04h
' dec ecx
' jne Label2
' Label1:
' call dword ptr [ebp+08h]
' mov dword ptr [ebp+0Ch], eax
' mov eax, dword ptr [ebp+14h]
' test eax, eax
' je Label3
' lea eax, dword ptr [00000000h+esi*4]
' mov dword ptr [ebp+10h], eax
' add esp, dword ptr [ebp+10h]
' Label3:
' mov eax, dword ptr [ebp+0Ch]
' pop esi
' pop ebp
' retn 0010h
_关闭对象 (hRead)
跳出循环 ()

返回值 = 返回值 + 临时
_取中断进程退出代码 (PROCESS_INFORMATION.进程句柄, EXIT)  ' 查看指定进程是否已结束
如果真 (EXIT ≠ #STILL_ACTIVE )  ' 因为会有程序退出来了,但管道中还有xx的情况,所以必须在管道中没有xx的情况下判断程序是否已结束,这时才能中止循环!
_关闭对象 (hRead)  ' 关闭管道
跳出循环 ()

处理事件 ()
判断循环尾 ()
返回 (返回值)


用的上面这个取dos返回,但我看他接受即时的文本是用的回调,假如我要同时启动50个命令行,难道要50个回调来接受吗?有什么思路可以处理这种吗

最佳答案

查看完整内容

回调子程序设置成同一个

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:100% (6/6)

签到天数: 9 天

发表于 2020-2-15 12:52:11 | 显示全部楼层   天津市天津市
回调子程序设置成同一个
回复

使用道具 举报

结帖率:99% (88/89)
 楼主| 发表于 2020-2-15 13:19:33 | 显示全部楼层   湖北省恩施土家族苗族自治州
qq1347522182 发表于 2020-2-15 13:07
回调子程序设置成同一个

那请问我在回调里面怎么去区分不同的进程呢
回复

使用道具 举报

发表于 2020-2-15 13:22:49 | 显示全部楼层   山东省济南市
自己加个id参数什么的就行了
回复

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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