{"id":5158,"date":"2019-12-27T22:41:40","date_gmt":"2019-12-27T14:41:40","guid":{"rendered":"http:\/\/blog.qdac.cc\/?p=5158"},"modified":"2019-12-29T23:33:38","modified_gmt":"2019-12-29T15:33:38","slug":"%e6%95%99%e7%a8%8b%e5%88%9b%e5%bb%ba%e4%b8%80%e4%b8%aa%e8%bf%9b%e7%a8%8b%e5%b9%b6%e8%af%bb%e5%8f%96%e5%85%b6%e6%8e%a7%e5%88%b6%e5%8f%b0%e8%be%93%e5%87%ba%e5%86%85%e5%ae%b9","status":"publish","type":"post","link":"https:\/\/blog.qdac.cc\/?p=5158","title":{"rendered":"[\u6559\u7a0b]\u521b\u5efa\u4e00\u4e2a\u8fdb\u7a0b\u5e76\u8bfb\u53d6\u5176\u63a7\u5236\u53f0\u8f93\u51fa\u5185\u5bb9"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>\/\/\/&lt;summary>\u521b\u5efa\u4e00\u4e2a\u8fdb\u7a0b\u5e76\u8bfb\u53d6\u5176\u63a7\u5236\u53f0\u8f93\u51fa\u5185\u5bb9&lt;\/summary>\n\/\/\/&lt;param name=\"AFileName\">\u8981\u6267\u884c\u7684\u6587\u4ef6\u7684\u5b8c\u6574\u8def\u5f84&lt;\/param>\n\/\/\/&lt;param name=\"AParams\">\u8981\u6267\u884c\u7684\u6587\u4ef6\u547d\u4ee4\u884c\u53c2\u6570&lt;\/param>\n\/\/\/&lt;param name=\"AOutputs\">\u63a7\u5236\u53f0\u5185\u5bb9\u8f93\u51fa\u76ee\u6807&lt;\/param>\n\/\/\/&lt;param name=\"APath\">\u7a0b\u5e8f\u8fd0\u884c\u7684\u5f53\u524d\u76ee\u5f55\uff0c\u9ed8\u8ba4\u4e3a AFileName \u6587\u4ef6\u6240\u5728\u7684\u76ee\u5f55&lt;\/param>\n\/\/\/&lt;param name=\"AExitCode\">\u7a0b\u5e8f\u9000\u51fa\u4ee3\u7801&lt;\/param>\n\/\/\/&lt;returns>\u521b\u5efa\u8fdb\u7a0b\u6210\u529f\uff0c\u8fd4\u56de true\uff0c\u5426\u5219\u8fd4\u56de false&lt;\/returns>\nfunction DosCommand(AFileName, AParams: String; AOutputs: TStrings;\n  APath: String = '';AExitCode:PDWORD=nil): Boolean;\nvar\n  sa: SECURITY_ATTRIBUTES;\n  si: STARTUPINFO;\n  pi: PROCESS_INFORMATION;\n  hRead, hWrite: THandle;\n  buffer: array [0 .. 4095] of Byte;\n  bytesRead, bytesToRead: DWORD;\n  TotalBytesAvail: DWORD;\n  AStream: TBytesStream;\n  AEncoding: TEncoding;\n  ACode:DWORD;\nbegin\n  sa.nLength := sizeof(SECURITY_ATTRIBUTES);\n  sa.lpSecurityDescriptor := nil; \/\/ \u4f7f\u7528\u7cfb\u7edf\u9ed8\u8ba4\u7684\u5b89\u5168\u63cf\u8ff0\u7b26\n  sa.bInheritHandle := true; \/\/ \u521b\u5efa\u7684\u8fdb\u7a0b\u7ee7\u627f\u53e5\u67c4\n  if not CreatePipe(hRead, hWrite, @sa, 0) then \/\/ \u521b\u5efa\u533f\u540d\u7ba1\u9053\n  begin\n    Result := false;\n    if Assigned(AOutputs) then\n      AOutputs.Add(Format('\u533f\u540d\u7ba1\u9053\u521b\u5efa\u5931\u8d25(%d):%s', [GetLastError(),\n        SysErrorMessage(GetLastError())]));\n    Exit;\n  end;\n  AStream := TBytesStream.Create;\n  try\n    FillChar(si, sizeof(si), 0);\n    si.cb := sizeof(STARTUPINFO);\n    GetStartupInfo(si);\n    si.hStdError := hWrite;\n    si.hStdOutput := hWrite; \/\/ \u65b0\u521b\u5efa\u8fdb\u7a0b\u7684\u6807\u51c6\u8f93\u51fa\u8fde\u5728\u5199\u7ba1\u9053\u4e00\u7aef\n    si.wShowWindow := SW_HIDE; \/\/ \u9690\u85cf\u7a97\u53e3\n    si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;\n    if Length(APath) > 0 then\n      SetCurrentDirectory(PChar(APath))\n    else\n      APath:=ExtractFilePath(AFileName);\n    if not CreateProcess(nil, PChar(AnsiQuotedStr(AFileName,'\"')+' '+AParams), nil, nil, true, CREATE_NEW_CONSOLE,\n      nil, PChar(APath), si, pi) then\n    begin\n      Result := false;\n      if Assigned(AOutputs) then\n        AOutputs.Add(Format('\u8fdb\u7a0b\u521b\u5efa\u5931\u8d25(%d):%s', [GetLastError(),\n          SysErrorMessage(GetLastError())]));\n      Exit;\n    end;\n    ACode:=0;\n    while PeekNamedPipe(hRead, nil, 0, nil, @TotalBytesAvail, nil) do\n    begin\n      if TotalBytesAvail > 4096 then\n        TotalBytesAvail := 4096;\n      if TotalBytesAvail > 0 then\n      begin\n        if ReadFile(hRead, buffer, TotalBytesAvail, bytesRead, nil) then\n          begin\n          AStream.WriteBuffer(buffer, TotalBytesAvail);\n          \/\/\u5982\u679c\u8981\u5373\u65f6\u8f93\u51fa\u547d\u4ee4\u884c\u5185\u5bb9\uff0c\u5c31\u5e94\u8be5\u5728\u6b64\u5c1d\u8bd5\u89e3\u6790\u5e76\u52a0\u5165\u5230AOutputs\u4e2d\uff0c\u6b64\u5904\u9ed8\u8ba4\u4e0d\u7740\u6025\n          end\n        else\n          break;\n      end\n      else if GetExitCodeProcess(pi.hProcess, ACode) then\n        begin\n        if ACode=STILL_ACTIVE then\n          Sleep(50)\n        else\n          break\n        end\n      else\n        break;\n    end;\n    if Assigned(AOutputs) and (AStream.Size>0) then\n    begin\n      AEncoding:=nil;\n      TEncoding.GetBufferEncoding(AStream.Bytes, AEncoding,TEncoding.ANSI);\n      AOutputs.Text := AEncoding.GetString(AStream.Bytes, 0, AStream.Size);\n    end;\n    ACode:=0;\n    if GetExitCodeProcess(pi.hProcess, ACode) then\n      begin\n      Result := ACode = 0;\n      if Assigned(AExitCode) then\n        AExitCode^:=ACode;\n      end\n    else\n      Result := false;\n  finally\n    CloseHandle(hWrite);\n    CloseHandle(hRead);\n    FreeAndNil(AStream);\n  end;\nend;<\/code><\/pre>\n\n\n\n<p>\u793a\u4f8b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>procedure TForm1.Button1Click(Sender: TObject);\nvar\n  AResult: TStringList;\nbegin\n  AResult := TStringList.Create;\n  try\n    DosCommand('C:\\Windows\\System32\\cmd.exe', '\/C dir\/w', Memo1.Lines, 'c:\\');\n  finally\n    FreeAndNil(AResult);\n  end;\nend;<\/code><\/pre>\n\n\n\n<p>\u8fd0\u884c\u7ed3\u679c <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"652\" height=\"300\" src=\"https:\/\/blog.qdac.cc\/wp-content\/uploads\/2019\/12\/QQ\u622a\u56fe20191227224033.jpg\" alt=\"\" class=\"wp-image-5159\"\/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u793a\u4f8b \u8fd0\u884c\u7ed3\u679c<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[8],"tags":[],"class_list":["post-5158","post","type-post","status-publish","format-standard","hentry","category-delphi"],"views":3318,"_links":{"self":[{"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/posts\/5158","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5158"}],"version-history":[{"count":3,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/posts\/5158\/revisions"}],"predecessor-version":[{"id":5163,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/posts\/5158\/revisions\/5163"}],"wp:attachment":[{"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5158"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}