
取DOS执行结果,也就是通过管道把cmd的返回值取出来,已经录制了三课,用到的API较多,难度交大,要连续关注这三集,本课把它封装了成了模块,每课都在官网发布了源码。
.版本 2
.子程序 取DOS执行结果, 文本型, 公开
.参数 dos命令, 文本型
.局部变量 CreatePipe_结构体, SECURITY_ATTRIBUTES, , , CreatePipe_结构体
摘要: .版本 2.程序集 窗口程序集1.子程序 __启动窗口_创建完毕模块注册 ().子程序 _组合框1_将弹出列表.局部变量 进程, 枚举进程结构, , "0" //进程变量是一个数组,数组元素是枚举进程结构.局部变量 计次, 整数型组合框1.清空 ().计次循环首 (枚举进程 (进程), 计次) '。如果我们要得到足够多的关于新的进程的信息,控制新的进程的细节属性,若要达到这些目的,我们就需要使用createprocess函数了。} 而启动进程则只需要createprocess函数就可完成,需要注意的是这个函数的几个输入参数,第一个参数是//启动新进程int cstaticfunc::createnewprocess(lpcstr pszexename){ process_information piprocinfogps。
.局部变量 进程标识符_CreateProcess, PROCESS_INFORMATION, , , 进程标识符_CreateProcess
.局部变量 hRead, 整数型, , , 读取管道数据的文件句柄
.局部变量 hWrite, 整数型, , , 写管道数据的文件句柄
.局部变量 len, 整数型
.局部变量 txt, 字节集
.局部变量 EXIT, 整数型

.局部变量 返回文本, 文本型
' 结构体的大小初始化设置
CreatePipe_结构体.nLength = 12
' 设置安全描述
CreatePipe_结构体.lpSecurityDescriptor = 0
' 确定创建一个新进程时继承返回的句柄,如果为0,那么新进程将不会继承句柄,如果此字段设置为非0的值,那会就会继承该句柄
CreatePipe_结构体.bInheritHandle = 1
' 创建一个匿名管道
CreatePipe (hRead, hWrite, CreatePipe_结构体, 0)
' 应用程序必须初始化
进程启动信息_CreateProcess.cb = 68
' 制定wShowWindow有效

进程启动信息_CreateProcess.dwFlags = 位或 (#STARTF_USESHOWWINDOW, #STARTF_USESTDHANDLES)
' 为0不显示新建进程的主窗口,为1显示
进程启动信息_CreateProcess.wShowWindow = #SW_HIDE
进程启动信息_CreateProcess.hStdOutput = hWrite
进程启动信息_CreateProcess.hStdError = hWrite
' 判断操作系统类型,选择不同cmd
.如果 (取操作系统类别 () ≤ 2)
' 创建一个进程,并且设置读写管道,创建成功后,进程会自动再创建一个写管道端口
如何用dos命令让电脑从u盘启动=== (1)用dos命令是无法让电脑从u盘启动。其实想启动dos系统只需要一张软盘即可,dos的系统启动文件有io.sys、msdos.sys和command.com三个,只要有这三个文件就可以使用dos启动电脑,并且可以执行内部命令、运行程序和进行磁盘操作。接调用dos和windows命令: 单击dos command命令(快捷按键f9),会弹出dos命。
.否则
CreateProcess (0, “cmd.exe /c ” + dos命令, 0, 0, 真, 0, 0, 0, 进程启动信息_CreateProcess, 进程标识符_CreateProcess)
.如果结束

燃气热水器移机相对来说比较简单一点,把燃气总开关关闭,然后打火燃烧管道中的多余燃气。你应该在createprocess调用返回后,从读管道端读取子进程的数据之前关闭管道。返回的句柄由管道的服务器端使用createpipe 创建一个匿名管道createprocess 创建一个新进程createsemaphore 创建一个新的信号机createwaitabletimer 创建一个可等待的计时器对象disconnectnamedpipe 断开一个客户与一个命名管道的连接duplicatehandle 在指出一个现有系统对象当前句柄的情况下。
CloseHandle (hWrite)
' 设立一个无限循环
.判断循环首 (len ≠ -1)
' 查看管道中的是否有数据
PeekNamedPipe (hRead, 0, 0, 0, len, 0)
.如果 (len ≠ 0)
txt = 取空白字节集 (1024)
' 从管道中读取数据
ReadFile (hRead, txt, 1023, len, 0)
返回文本 = 返回文本 + 取字节集数据 (txt, #文本型, )
.否则

' 查看一下指定的进程是否已经结束
exit 函数是退出应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给 os,这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关,一般是 0 为正常退出,非 0 为非正常退出。一,桌面运行一个程序时,explorer调用shellexecuteex(),shellexecuteex()进一步调用createprocess()创建进程,由于这个进程需要管理员权限才能运行,于是createprocess返回error_elevation_required(740)。hprocess是要结束的目标进程的句柄,uexitcode指定目标进程的退出代码,可以使用getexitcodeprocess取得一个进程的退出代码。
' 因为有的进程退出了,但管道中还有数据,所以必须在管道中没有数据的情况下判断程序是否已经结束,从而终止循环
.如果真 (EXIT ≠ #STILL_ACTIVE)
' 彻底关闭管道
CloseHandle (hRead)
跳出循环 ()
.如果真结束
.如果结束
' 为了减轻系统的堵塞,
处理事件 ()
' 输出调试文本 (到文本 (len))
.判断循环尾 ()
返回 (返回文本)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-96418-1.html
请把你的这条高论建议给奥巴马和安倍
口气小点不然要翻船谪
但北洋水师主力舰占优