|
系统_取DOS执行结果T | 字节集 | |
|
命令行文本 | 字节集 | | | |
即时回显 | 子程序指针 | | | | UNICODE | 逻辑型 | | | | ExitCode | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 |
hRead | 整数型 | | |
hWrite | 整数型 | | |
sa | SECURITY_ATTRIBUTES | | |
nMaxCount | 整数型 | | |
szPath | 字节集 | | |
szCmdLine | 字节集 | | |
si | STARTUPINFO | | |
pi | PROCESS_INFORMATION | | |
dwBytesInStdOut | 整数型 | | |
lRes | 逻辑型 | | |
dwExitCode | 整数型 | | |
szTemp | 字节集 | | |
szBuf | 字节集 | | |
sa.nLength = 12 sa.lpSecurityDescriptor =
#NULL sa.bInheritHandle = 真
lRes =
CreatePipe (hRead, hWrite, sa, 0
)
如果真 (lRes =
假)
返回 ({ })si.cb = 68
si.dwFlags =
位或 ( #STARTF_USESTDHANDLES, #STARTF_USESHOWWINDOW )si.wShowWindow =
#SW_HIDE si.hStdInput = hRead
si.hStdOutput = hWrite
si.hStdError = hWrite
szPath =
取空白字节集 (incShl ( #MAX_PATH, 真))
SHGetSpecialFolderPathW ( #NULL, 取指针字节集_ (szPath
),
#CSIDL_SYSTEM, 假)写到内存 (编码_Ansi到Unicode (选择 (_WIN32_WINNT ≥
#_WIN32_WINNT_WINXP, “\cmd.exe”,
“\command.com”),
),
取指针字节集_ (szPath
) +
incShl (文本_取长度W (szPath
),
真),
)szCmdLine =
编码_Ansi到Unicode (“ /c ”,
真) + 命令行文本
nMaxCount =
取字节集长度 (szCmdLine
)szCmdLine = szCmdLine +
取空白字节集 (incShl ( #MAXSHORT, 真) - nMaxCount
) lRes =
CreateProcessW (取指针字节集_ (szPath
),
取指针_字节集型 (szCmdLine
),
取数据_通用型 (sa
),
#NULL, 真, 0,
#NULL, #NULL, si, pi
)CloseHandle (hWrite
)
如果真 (lRes =
假)
CloseHandle (hRead
)
返回 ({ })CloseHandle (pi.hThread)WaitForInputIdle (pi.hProcess, 1000
)
判断循环首 (dwBytesInStdOut ≠ -1
)
PeekNamedPipe (hRead,
#NULL, 0,
#NULL, dwBytesInStdOut,
#NULL )
如果 (dwBytesInStdOut > 0
)

szTemp =
取空白字节集 (dwBytesInStdOut
)
ReadFile (hRead, szTemp, dwBytesInStdOut, dwBytesInStdOut,
#NULL )

szBuf = szBuf + szTemp


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


如果 (UNICODE
)



szTemp =
A2W_CP (szTemp, m_CodePage
)



szTemp = szTemp +
{ 0
}

lRes = 程序_执行整数子程序 (即时回显, 取指针_字节集型 (szTemp), , ) ≠ 0


如果真 (lRes
)


跳出循环 ()







GetExitCodeProcess (pi.hProcess, dwExitCode
)

如果真 (dwExitCode ≠
#STILL_ACTIVE )

跳出循环 ()


Sleep (1)
判断循环尾 ()CloseHandle (pi.hProcess
)CloseHandle (hRead
)ExitCode = dwExitCode
如果真 (szBuf =
{ })
返回 ({ })
如果 (UNICODE
)
返回 (A2W_CP (szBuf, m_CodePage
))

szBuf = szBuf +
{ 0
}返回 (szBuf)