delphi 调用 DOS窗口,怎样连续delphi执行dos命令令

博客访问: 794952
博文数量: 800
注册时间:
认证徽章:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: IT综合技术
unit UnitCmdS
& Windows,SysUtils,C
&//K8执行DOS并返回结果
function RunDosCommand(Command: string):
implementation
//================================================================
//K8执行DOS并返回结果
function RunDosCommand(Command: string):
& hReadPipe: TH
& hWritePipe: TH
& SI: TStartUpI
& PI: TProcessI
& SA: TSecurityA
& // & & SD & : & TSecurityD
& BytesRead: DWORD;
& Dest: array[0..1023]
& CmdLine: array[0..512]
& TmpList: TStringL
& Avail, ExitCode, wrResult: DWORD;
& osVer: TOSVERSIONINFO;
& tmpstr: AnsiS
& osVer.dwOSVersionInfoSize := Sizeof(TOSVERSIONINFO);
& GetVersionEX(osVer);
& if osVer.dwPlatformId = VER_PLATFORM_WIN32_NT then
& // & & & & InitializeSecurityDescriptor(@SD, & SECURITY_DESCRIPTOR_REVISION);
& // & & & & SetSecurityDescriptorDacl(@SD, & True, & nil, & False);
& & SA.nLength := SizeOf(SA);
& & SA.lpSecurityDescriptor := //@SD;
& & SA.bInheritHandle := T
& & CreatePipe(hReadPipe, hWritePipe, @SA, 0);
& & CreatePipe(hReadPipe, hWritePipe, nil, 1024);
& & FillChar(SI, SizeOf(SI), 0);
& & SI.cb := SizeOf(TStartUpInfo);
& & SI.wShowWindow := SW_HIDE;
& & SI.dwFlags := STARTF_USESHOWWINDOW;
& & SI.dwFlags := SI.dwFlags or STARTF_USESTDHANDLES;
& & SI.hStdOutput := hWriteP
& & SI.hStdError := hWriteP
& & StrPCopy(CmdLine, Command);
& & if CreateProcess(nil, CmdLine, nil, nil, True, NORMAL_PRIORITY_CLASS, nil, nil, SI, PI) then
& & & ExitCode := 0;
& & & while ExitCode = 0 do
& & & begin
& & & & wrResult := WaitForSingleObject(PI.hProcess, 500);
& // & & & & & & & & if & PeekNamedPipe(hReadPipe, & nil, & 0, & nil, & @Avail, & nil) & then
& & & & if PeekNamedPipe(hReadPipe, @Dest[0], 1024, @Avail, nil, nil) then
& & & & begin
& & & & & if Avail > 0 then
& & & & & begin
& & & & & & TmpList := TStringList.C
& & & & & & try
& & & & & & & FillChar(Dest, SizeOf(Dest), 0);
& & & & & & & ReadFile(hReadPipe, Dest[0], Avail, BytesRead, nil);
& & & & & & & TmpStr := Copy(Dest, 0, BytesRead - 1);
& & & & & & & TmpList.Text := TmpS
& & & & & & & Result :=
& & & & & & finally
& & & & & & & TmpList.F
& & & & & &
& & & & if wrResult
WAIT_TIMEOUT then ExitCode := 1;
& & & GetExitCodeProcess(PI.hProcess, ExitCode);
& & & CloseHandle(PI.hProcess);
& & & CloseHandle(PI.hThread);
& & CloseHandle(hReadPipe);
& & CloseHandle(hWritePipe);
//=================================================================
阅读(520) | 评论(0) | 转发(0) |
下一篇:没有了
相关热门文章
给主人留下些什么吧!~~
请登录后评论。谁给解释一下delphi 调用dos命令的m_Result:=GetLogicalDriveStrings(MAX_PATH,buf); &
i:=1 to (m_Result div 4) do &
str_temp:=string(buf[i*4]+buf[i*4+1]+buf[i*4+2]); &
if getdrivetype(pchar(str_temp)) = DRIVE_REMOVABLE
winexec(pchar(all),sw_hide) & &str_temp 这个是获得优盘盘符的变量,不知道这个怎么个意思?请问dos怎么调用delphi的变量--------------------------------------------------------------调用 cmd.exe ,后面是命令行参数------解决方案--------------------------------------------------------'cmd.exe /c + dos命令'
这是个delphi调用dos命令的格式这里不是dos调用delphi的变量, 是组合一个dos命令------解决方案--------------------------------------------------------dos命令楼上都已经解释了,我来解释其它的;GetLogicalDriveStrings是获取系统中所有的逻辑驱动器,如硬盘,軟盘,移动硬盘,光盘。。。返回的缓冲区结果是这样的A:\ C:\ D:\ 中间有个空格,所有每个驱动器占 4 字节即循环(m_Result div 4)次,再分隔取出字符,就得到对应的驱动器盘符了GetDriveType就是判断驱动器类型,结果有很多种,比如DRIVE_CDROM:光盘,DRIVE_FIXED:本地硬盘DRIVE_NO_ROOT_DIR:可移动磁盘DRIVE_REMOVABLE:软盘...查看: 182|回复: 7
注册时间最后登录阅读权限10积分12512精华0帖子
该用户从未签到金钱66090 12512 0 在线时间626 小时阅读权限10精华0积分12512UID412
请问怎样在程序中执行Dos命令
注册时间最后登录阅读权限200积分12830精华0帖子
TA的每日心情慵懒 13:43:06签到天数: 15 天[LV.4]偶尔看看III金钱62002 12558 25 在线时间12 小时阅读权限200精华0积分12830UID84
例如我想写一个'ping 172.16.0.216'
我这样写不运行
ShellExecu(Handle,'open','command ping 172.16.0.216',nil,nil,SW_SHOWNORMAL ) ;,请问应该怎么写
& && && && &&&
& && && && && &
注册时间最后登录阅读权限10积分12314精华0帖子
TA的每日心情擦汗 08:43:45签到天数: 17 天[LV.4]偶尔看看III金钱60897 12274 4 在线时间19 小时阅读权限10精华0积分12314UID2
WinExec(pchar('command /c ping 172.16.0.216'),SW_SHOW);
绝对搞定,我才用过。
注册时间最后登录阅读权限10积分11971精华0帖子
该用户从未签到金钱59865 11971 0 在线时间0 小时阅读权限10精华0积分11971UID9
winexec('c:/ /c ping 172.16.0.216& c:\tmp.txt', SW_SHOWNORMAL);
把你的PING后的结果保存到C:\TMP.TXT文件中
注册时间最后登录阅读权限10积分11928精华1帖子
该用户从未签到金钱59724 11927 0 在线时间3 小时阅读权限10精华1积分11928UID4
ShellExecut(Handle,'open',pchar('ping 172.16.0.216'),nil,nil,SW_SHOWNORMAL )
注册时间最后登录阅读权限10积分11993精华0帖子
该用户从未签到金钱59990 11993 0 在线时间2 小时阅读权限10精华0积分11993UID26
ping不是dos命令,而是单独的一个程序
注册时间最后登录阅读权限10积分11928精华1帖子
该用户从未签到金钱59724 11927 0 在线时间3 小时阅读权限10精华1积分11928UID4
procedure TForm1.Button1Click(Sender: TObject);
&&with TStringList.Create do try
& & Text := 'C:\WINNT\system32\ping.exe 172.16.0.216& c:\tmp.txt';
& & SaveToFile('C:\tmp.bat');
&&WinExec('C:\tmp.bat', SW_SHOWNORMAL)
注册时间最后登录阅读权限10积分11718精华0帖子
该用户从未签到金钱61058 11718 0 在线时间119 小时阅读权限10精华0积分11718UID814
谢谢各位,给分了
Powered by小焱的网络随笔
小焱的网络随笔
发表时间:日17:55:41
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。delphi 调用 DOS窗口,怎样连续执行dos命令_百度知道
delphi 调用 DOS窗口,怎样连续执行dos命令
通常来说,你可以直接直接用 del订饥斥渴俪韭筹血船摩phi 来运行 dos 命令(winexe / shellexecute)。如果是那种模拟打开 dos 窗口(shell),并键入命令并执行的情况,可以考虑发送按键消息给 dos 窗口。
其他类似问题
为您推荐:
dos窗口的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 delphi dos命令 的文章

 

随机推荐