精易论坛
标题: 取DOS返回值,返回进程ID [打印本页]
作者: 向月亮道晚安 时间: 2024-10-22 12:43
标题: 取DOS返回值,返回进程ID
|
取DOS返回文本1 | 文本型 | |
|
命令行文本 | 文本型 | | | |
即时回显 | 子程序指针 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 |
SECURITY_ATTRIBUTES | SECURITY_ATTRIBUTES | | |
STARTUPINFO | STARTUPINFO_短整数 | | |
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
) 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
) 
如果 (len ≠ 0
)

txt =
取空白字节集 (1024
)
_读出文件中数据 (hRead, txt, 1023, len, 0
) 

临时 =
取字节集数据 (txt,
#文本型, )

如果真 (是否为空 (即时回显
) =
假)


参数
[1
] =
_取指针_文本型 (临时, 临时, 0
)


如果真 (_动态调用子程序 ( #动态调用代码, 即时回显, 参数, 1,
假))












































































































_关闭对象 (hRead
)


跳出循环 ()




返回值 = 返回值 + 临时
_取中断进程退出代码 (PROCESS_INFORMATION.进程句柄, EXIT
) 

如果真 (EXIT ≠
#STILL_ACTIVE ) 

_关闭对象 (hRead
) 

跳出循环 ()


处理事件 ()
判断循环尾 ()返回 (返回值
)
这个代码取自论坛大佬的代码,返回值是返回全部的DOS,想给他改成DOS返回用即时回显,子程序返回进程ID,要怎么改?
作者: dnxl 时间: 2024-10-22 13:02
即时回显 这是个回调指针啊,不是返回的值
PID应该在创建进程时最后一个参数PROCESS_INFORMATION结构里返回
作者: 向月亮道晚安 时间: 2024-10-22 13:04
即时会显显示的是DOS,他这个是即时会显返回了一遍,子程序又返回了一遍,我想把子程序的返回改成进程ID
作者: dnxl 时间: 2024-10-22 13:06
那你把返回类型改整数,最后返回PROCESS_INFORMATION.ProcessID不就行了
补充内容 (2024-10-22 13:06):
也就是返回结构体第三个成员
作者: LEOONL 时间: 2024-10-22 13:06
|
取DOS返回文本1 | 整数型 | |
|
命令行文本 | 文本型 | | | |
即时回显 | 子程序指针 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 |
SECURITY_ATTRIBUTES | SECURITY_ATTRIBUTES | | |
STARTUPINFO | STARTUPINFO_短整数 | | |
PROCESS_INFORMATION | _进程结构 | | |
txt | 字节集 | | |
len | 整数型 | | |
hWrite | 整数型 | | |
hRead | 整数型 | | |
EXIT | 整数型 | | |
返回值 | 文本型 | | |
临时 | 文本型 | | |
参数 | 整数型 | | 1 |
进程ID | 整数型 | | |
如果真 (命令行文本 =
“”)
返回 (“”)
SECURITY_ATTRIBUTES.nLength = 12
SECURITY_ATTRIBUTES.lpSecurityDescriptor = 0
SECURITY_ATTRIBUTES.bInheritHandle = 1
CreatePipe (hRead, hWrite, SECURITY_ATTRIBUTES, 0
) STARTUPINFO.cb = 68
STARTUPINFO.dwFlags =
位或 ( #STARTF_USESHOWWINDOW, #STARTF_USESTDHANDLES )STARTUPINFO.wShowWindow =
#SW_HIDE STARTUPINFO.hStdOutput = hWrite
STARTUPINFO.hStdError = hWrite
如果 (取操作系统类别 () ≤ 2
)
进程ID=
_创建新进程_短整数 (0,
“command.com /c ” + 命令行文本, 0, 0, 真, 0, 0, 0, STARTUPINFO, PROCESS_INFORMATION
) 
进程ID=
_创建新进程_短整数 (0,
“cmd.exe /c ” + 命令行文本, 0, 0, 真, 0, 0, 0, STARTUPINFO, PROCESS_INFORMATION
)
_关闭对象 (hWrite
)
判断循环首 (len ≠ -1
)
PeekNamedPipe (hRead, 0, 0, 0, len, 0
) 
如果 (len ≠ 0
)

txt =
取空白字节集 (1024
)
_读出文件中数据 (hRead, txt, 1023, len, 0
) 

临时 =
取字节集数据 (txt,
#文本型, )

如果真 (是否为空 (即时回显
) =
假)


参数
[1
] =
_取指针_文本型 (临时, 临时, 0
)


如果真 (_动态调用子程序 ( #动态调用代码, 即时回显, 参数, 1,
假))












































































































_关闭对象 (hRead
)


跳出循环 ()




返回值 = 返回值 + 临时
_取中断进程退出代码 (PROCESS_INFORMATION.进程句柄, EXIT
) 

如果真 (EXIT ≠
#STILL_ACTIVE ) 

_关闭对象 (hRead
) 

跳出循环 ()


处理事件 ()
判断循环尾 ()返回 (进程ID
)
作者: 向月亮道晚安 时间: 2024-10-22 13:16
好像有点错误
错误所处位置: 模块:"DOS"; 程序集:"程序集"; 子程序:"取DOS返回文本2"
错误(10044): 不能将“文本型”数据转换到“整数型”数据。
作者: LEOONL 时间: 2024-10-22 13:17
如果真 (命令行文本 = “”)
返回 (“”)
删掉
补充内容 (2024-10-22 13:18):
或者 返回(0)
作者: 向月亮道晚安 时间: 2024-10-22 13:24
返回的都是1,而且命令返回也只有一行了
作者: LEOONL 时间: 2024-10-22 13:28
放完整源码看看
作者: 向月亮道晚安 时间: 2024-10-22 13:34
我的取DOS3就是你的这个
作者: 向月亮道晚安 时间: 2024-10-22 13:35
就改了
如果真 (命令行文本 = “”)
返回 (0)
这里
作者: LEOONL 时间: 2024-10-22 13:44
完整源码,光你这段我运行不了
作者: 向月亮道晚安 时间: 2024-10-22 14:03
窗口程序集名 | 保 留 | 保 留 | 备 注 |
窗口程序集_窗口1 | | | |
ID =
取DOS返回文本1 (编辑框2.内容, &信息回调
)调试输出 (ID
)编辑框3.
加入文本 (文本 +
#换行符 )|
取DOS返回文本1 | 整数型 | |
|
命令行文本 | 文本型 | | | |
即时回显 | 子程序指针 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 |
SECURITY_ATTRIBUTES | SECURITY_ATTRIBUTES | | |
STARTUPINFO | STARTUPINFO_短整数 | | |
PROCESS_INFORMATION | _进程结构 | | |
txt | 字节集 | | |
len | 整数型 | | |
hWrite | 整数型 | | |
hRead | 整数型 | | |
EXIT | 整数型 | | |
返回值 | 文本型 | | |
临时 | 文本型 | | |
参数 | 整数型 | | 1 |
进程ID | 整数型 | | |
如果真 (命令行文本 =
“”)
返回 (0
)
SECURITY_ATTRIBUTES.nLength = 12
SECURITY_ATTRIBUTES.lpSecurityDescriptor = 0
SECURITY_ATTRIBUTES.bInheritHandle = 1
CreatePipe (hRead, hWrite, SECURITY_ATTRIBUTES, 0
) STARTUPINFO.cb = 68
STARTUPINFO.dwFlags =
位或 ( #STARTF_USESHOWWINDOW, #STARTF_USESTDHANDLES )STARTUPINFO.wShowWindow =
#SW_HIDE STARTUPINFO.hStdOutput = hWrite
STARTUPINFO.hStdError = hWrite
如果 (取操作系统类别 () ≤ 2
)
进程ID=
_创建新进程_短整数 (0,
“command.com /c ” + 命令行文本, 0, 0, 真, 0, 0, 0, STARTUPINFO, PROCESS_INFORMATION
) 
进程ID=
_创建新进程_短整数 (0,
“cmd.exe /c ” + 命令行文本, 0, 0, 真, 0, 0, 0, STARTUPINFO, PROCESS_INFORMATION
)
_关闭对象 (hWrite
)
判断循环首 (len ≠ -1
)
PeekNamedPipe (hRead, 0, 0, 0, len, 0
) 
如果 (len ≠ 0
)

txt =
取空白字节集 (1024
)
_读出文件中数据 (hRead, txt, 1023, len, 0
) 

临时 =
取字节集数据 (txt,
#文本型, )

如果真 (是否为空 (即时回显
) =
假)


参数
[1
] =
_取指针_文本型 (临时, 临时, 0
)


如果真 (_动态调用子程序 ( #动态调用代码, 即时回显, 参数, 1,
假))












































































































_关闭对象 (hRead
)


跳出循环 ()




返回值 = 返回值 + 临时
_取中断进程退出代码 (PROCESS_INFORMATION.进程句柄, EXIT
) 

如果真 (EXIT ≠
#STILL_ACTIVE ) 

_关闭对象 (hRead
) 

跳出循环 ()


处理事件 ()
判断循环尾 ()返回 (进程ID
)
全部的代码就这么多了
作者: 千年 时间: 2024-10-22 14:22
这种要不要??、
作者: 向月亮道晚安 时间: 2024-10-22 14:29
我想要的是取进程ID
作者: 千年 时间: 2024-10-22 14:38
本来就是创建一个cmd.exe进程,再从进程里取出
作者: 向月亮道晚安 时间: 2024-10-23 08:49
大佬发我看看?
欢迎光临 精易论坛 (https://125.confly.eu.org/) |
Powered by Discuz! X3.4 |