首页 > 其他分享 >解决 DELPHI 中执行外部命令出现屏幕一闪的问题的方法

解决 DELPHI 中执行外部命令出现屏幕一闪的问题的方法

时间:2024-01-13 21:23:29浏览次数:30  
标签:exInfo end F1 一闪 外部命令 DELPHI Vcl 屏幕

解决 DELPHI 中执行外部命令出现屏幕一闪的问题的方法

有的时候我们在DELPHI中使用ShellExecuteEx(exInfo: TShellExecuteInfo)函数执行一些外部命令,但会出现,屏幕一闪的问题,解决方法如下:
设置 exinfo.nShow := SW_HIDE; //隐藏命令执行的窗口,不会出现屏幕一闪的情况
在exinfo.nShow := SW_SHOWNORMAL 情况下,屏幕会出现一闪的情况。
举个例子说明(例子不一定恰当,只是为了说明):将某个文件夹下的某一类文件通过外部命令统计数量,将该数量存在在一个文本文件里,然后读出来显示。

unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons,ShellAPI,
  Vcl.ExtCtrls;

type
  TForm2 = class(TForm)
    BitBtn1: TBitBtn;
    Label1: TLabel;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

function ShellExecute_AndWait(FileName: string; Params: string): Boolean;
var
  exInfo: TShellExecuteInfo;
  Ph: DWORD;
begin
  FillChar(exInfo, SizeOf(exInfo), 0);
  with exInfo do
  begin
    cbSize := SizeOf(exInfo);
    fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
    Wnd := GetActiveWindow();
    exInfo.lpVerb := 'open';
    exInfo.lpParameters := PChar(Params);
    lpFile := PChar(FileName);
    //nShow := SW_SHOWNORMAL;      //这个会出现屏幕一闪的情况
    nShow := SW_HIDE;              //隐藏命令执行的窗口,不会出现屏幕一闪的情况
  end;
  if ShellExecuteEx(@exInfo) then
    Ph := exInfo.hProcess
  else
  begin
    ShowMessage(SysErrorMessage(GetLastError));
    Result := true;
    exit;
  end;
  while WaitForSingleObject(exInfo.hProcess, 50) <> WAIT_OBJECT_0 do
    Application.ProcessMessages;
  CloseHandle(Ph);

  Result := true;
end;


procedure TForm2.BitBtn1Click(Sender: TObject);
Var
  F1 : TextFile;
  FileCounts:string;
begin
  if ShellExecute_AndWait('cmd.exe','/c dir E:\GITEE_HT\XTCSH\*.PAS /b /a-d| find /v /c "&#@" > FileCounts.txt') then
  begin
      AssignFile(F1,'FileCounts.txt');
      Reset(F1);
      Readln(F1,FileCounts);
      Label1.Caption := '文件数量是:'+FileCounts;
      CloseFile(F1);
  end;
end;

end.

标签:exInfo,end,F1,一闪,外部命令,DELPHI,Vcl,屏幕
From: https://www.cnblogs.com/qiao-fu/p/17962952

相关文章

  • delphi Panel和PageControl中加载窗体
    Panel和PageControl中加载窗体代码Panel中载入窗体procedureTForm1.Button1Click(Sender:TObject);beginForm2.Parent:=Panel1;Form2.Align:=alClient;Form2.BorderStyle:=bsNone;Form2.Show;end;TPageControl中载入窗体procedureTForm1.Button1Clic......
  • delphi redisclient测试
    unitUnit1;interfaceusesWinapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,System.Classes,Vcl.Graphics,Vcl.Controls,Vcl.Forms,Vcl.Dialogs,Vcl.StdCtrls,Vcl.Buttons;typeTForm1=class(TForm)Memo1:TMemo;BitBtn1:......
  • delphi JSON序列化(五)
    关于TJSONConverters的使用unitUnit1;interfaceusesWinapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,System.Classes,Vcl.Graphics,Vcl.Controls,Vcl.Forms,Vcl.Dialogs,Vcl.StdCtrls,Vcl.Buttons,Rest.JSON.Types,Rest.JsonReflect;t......
  • delphi JSON序列化(四)
    涉及的重要类REST.Json,REST.JsonReflect,REST.Json.Interceptors,REST.Json.Types单元中。一、TJson类最简单的一个类,提供了JSON->OBJECT和OBJECT->JSON几个方法,方法有TJsonOptions参数,如:   classfunctionObjectToJsonObject(AObject:TObject;AOptions:TJsonOpti......
  • 一加 Ace 3 售价2599元起,性能、屏幕、续航、质感全面领先同档
    在2024年1月4日,一加正式发布了Ace系列新品一加Ace3。作为2024年的开年之作,一加Ace3展现了全面拉满的性能、前所未有的旗舰体验以及超越预期的质感设计。一加Ace3搭载了骁龙8Gen2+LPDDR5X+UFS4.0性能铁三角,这使得它的性能达到了前所未有的高度。这款手机全球首发采用了8TLTPO......
  • 远程安卓盒子N1安装APP-远程查看机顶盒屏幕画面等
    title:远程安卓盒子N1安装IPTVAPP-远程查看机顶盒屏幕画面等tags:[N1,Android,安卓,iptv,家宽,远程控制,机顶盒,frps,frpc,frp]新版原文:https://www.carlzeng.top/search?q=远程安卓盒子N1安装APP-远程查看机顶盒屏幕画面等版权声明:本博客所有文章除特别声明外,均采用BY......
  • 页面结构据不同屏幕手机大小进行自适应+底部标签
    微信小程序请简单创建一个页面结构,要求页面结构根据不同屏幕手机大小进行自适应。<!--pages/test/test.wxml--><viewclass="tab">顶部区域</view><viewclass="content">内容区域</view><viewclass="player">底部区域</view>/* p......
  • [Mac软件]实用的屏幕录像工具:Apeaksoft Screen Recorder Mac v2.2.6
    编辑ApeaksoftScreenRecorder是一款专为Mac用户设计的高效、实用的屏幕录制工具。它可以帮助用户轻松地在计算机上录制任何视频、音频和屏幕截图,无论是在线电影、广播、游戏、视频教程还是网络摄像头视频,都可以轻松应对。此外,ApeaksoftScreenRecorder还提供了丰富的编辑功能,如......
  • Delphi 类(TObject、TPersistent、TComponent、TControl、TWinControl、TCustomControl
     TObject:    VCL中所有类的根类,即是说:VCL中所有的类/组件/控件都是从TObject中继承而来。TObject类中定义了基本的构造方法和析构方法。  TPersistent:    继承于TObject,按字典中的意思是“持久类”(姑且这样叫它吧,因为我一直就是这样叫这个类的-_-|)。该类在VCL中......
  • delphi 重新打开(Reopen)或最近打开(Open Recent)列表维护
    重新打开(Reopen)或最近打开(OpenRecent)列表维护介绍列出最近打开的项目和文件,供选择重新打开。重新打开列表由一条线分为两组:项目列在线的上方(例如,MyBigApp.dproj或MyFastApp.cbproj)源文件列在线的下方(例如,MyControl.pas或MyClass.cpp)位置File>OpenRecent或Fi......