delphi – 有没有办法直接运行“dir”?

delphi – 有没有办法直接运行“dir”?,第1张

概述在 my answer to this question,提问者需要快速获取网络驱动器上文件夹的目录列表,我建议使用DOS“dir”命令.不幸的是,它是一个命令,而不是一个程序,所以你不能用CreateProcess执行它,所以我不得不把它放在一个批处理文件中.我真的不喜欢那个解决方案.这对我来说感觉像是一个黑客.有没有人知道从Delphi而不是从外部批处理文件运行dir的方法? Invisibl 在 my answer to this question,提问者需要快速获取网络驱动器上文件夹的目录列表,我建议使用DOS“dir”命令.不幸的是,它是一个命令,而不是一个程序,所以你不能用CreateProcess执行它,所以我不得不把它放在一个批处理文件中.我真的不喜欢那个解决方案.这对我来说感觉像是一个黑客.有没有人知道从Delphi而不是从外部批处理文件运行dir的方法?解决方法 Invisible Solution(创建管道,执行命令,将stdout重定向到管道,读出管道):

function Console(const Command: String): String; var   StartupInfo: TStartupInfo;   ProcessInfo: TProcessinformation;   SecurityAttr: TSecurityAttributes;   OutputPipeRead,OutputPipeWrite: THandle;   Res: Boolean;   BufSize: Cardinal;   Buffer: String;   BytesRead: Cardinal; begin   FillChar(ProcessInfo,SizeOf(TProcessinformation),0);   FillChar(SecurityAttr,SizeOf(TSecurityAttributes),0);   SecurityAttr.nLength := SizeOf(SecurityAttr);   SecurityAttr.binheritHandle := true;   SecurityAttr.lpSecurityDescriptor := nil;   CreatePipe(OutputPipeRead,OutputPipeWrite,@SecurityAttr,0);   FillChar(StartupInfo,SizeOf(TStartupInfo),0);   StartupInfo.cb:=SizeOf(StartupInfo);   StartupInfo.hStdinput := 0;   StartupInfo.hStdOutput := OutputPipeWrite;   StartupInfo.hStdError := OutputPipeWrite;   StartupInfo.wShowWindow := SW_HIDE;   StartupInfo.DWFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;   Res := CreateProcess(nil,PChar(command),nil,true,CREATE_DEFAulT_ERROR_MODE or CREATE_NEW_CONSolE or                    norMAL_PRIORITY_CLASS,StartupInfo,ProcessInfo);   CloseHandle(OutputPipeWrite);   Result := '';   if Res then   begin      SetLength(Buffer,5000);     BufSize := Length(Buffer);     repeat       Res := Readfile(OutputPipeRead,Buffer[1],BufSize,BytesRead,nil);       Result := Result + copy(Buffer,1,BytesRead);     until not Res;     WaitForSingleObject(ProcessInfo.hProcess,INFINITE);     CloseHandle(ProcessInfo.hProcess);   end;   CloseHandle(OutputPipeRead); end;

样品用法:

ShowMessage(Console('cmd /c dir C:\'));
总结

以上是内存溢出为你收集整理的delphi – 有没有办法直接运行“dir”?全部内容,希望文章能够帮你解决delphi – 有没有办法直接运行“dir”?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230629.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存