精华内容
下载资源
问答
  • 2021-06-17 02:37:38

    【填空题】计算机图形学是指使用计算机通过()在显示设备上构造出图形来。

    更多相关问题

    跨立,左脚跨出时,腿弯曲。纠正方法:左脚跨出时, ( ) 。

    在IS曲线和LM曲线相交时,表示产品市场( )

    6、助教辅控台到机柜布线哪些线?

    软件可分为哪两大类?

    3 、移位寄存器不但可 _________ ,而且还能对数码进行 _________ 。

    发展速度主要是指( )。

    院前急救是指

    在()时为形参分配存储空间。

    中期妊娠是指孕

    任务3.3作业-可燃气体传感器的应用wu.doc/moocwork/js/editor20131024/dialogs/attachment_new/fileTypeImages/icon_doc.gif

    在IS曲线和LM曲线相交时,表示产品市场( )

    智慧职教: 税收的基本特征是(    )。

    在()时为形参分配存储空间。

    在()时为形参分配存储空间。

    跨立,左脚跨出时,腿弯曲。纠正方法:左脚跨出时, ( ) 。

    智慧职教: 下列造影不用碘剂的是

    确定权重的方法,常见的有( )

    发动机的润滑方式不包括下列哪项( )

    RFID的英文全称是 。

    智慧职教: 目前最广泛应用于临床磁共振成像技术的原子核是

    智慧职教: 税收的基本特征是(    )。

    3 、移位寄存器不但可 _________ ,而且还能对数码进行 _________ 。

    长跑训练一般不进行柔韧性和协调性的练习()

    中期妊娠是指孕

    气环的主要作用有?

    用与教学内容相关的、现实生活随处可见的自然现象来导入新课的方式是( )

    任务3.3作业-可燃气体传感器的应用wu.doc/moocwork/js/editor20131024/dialogs/attachment_new/fileTypeImages/icon_doc.gif

    各种型号的注射机最大开模行程均与模具厚度无关。

    气环的主要作用有?

    零售价格法与( )实质上是同一种方法。

    原创文章,作者:金融学山东大学威海网课答案,如若转载,请注明出处:http://www.kf14zhong.com/tiku2020/21106.html

    更多相关内容
  • 请注意,从Material Dialogs 2.xx开始,此库仅支持Kotlin。 最新的Java版本是0.9.6.0。 请注意,不支持0.9.6.0,因此不会对该版本进行错误和改进。 核心模块包含了开始使用该库所需的一切。 它包含所有核心功能和...
  • Gnome打开和保存文件对话框。 此新实现旨在包含在gnome2中。 对话框包括更好的可用性,可访问性,gnome HIG合规性以及面向gnome应用程序开发人员的易于使用的框架。
  • v3.8.8一个C文件+标头(将它们添加到您的C或C ++项目中),具有8个功能:-哔声-托盘通知弹出窗口-消息和问题-输入和密码-保存文件-打开文件-选择文件夹-颜色选择器是对OpenGL Vulkan GLFW GLUT GLUI VTK SFML TGUI ...
  • 对话老师主持的学生互动论坛:用C语言编写的CGI二进制文件
  • v3.8.7一个C文件+标头(将它们添加到C或C ++项目中),具有8个功能:-哔声-托盘通知弹出窗口-消息和问题-输入和密码-保存文件-打开文件-选择文件夹-颜色选择器对OpenGL Vulkan GLFW GLUT GLUI VTK SFML TGUI SDL ...
  • 我想要一个非常简单的对话框实现来询问用户问题,例如“ zenity”(或以前的XDialog)类型的接口的意图。 在查看了选项之后,我决定使用基于swing的UI组件...好像没有任何“聚合器”,我试图提供此功能。 希望你喜欢!
  • 像那些付费软件的注册算法一般是用什么算法? VCL组件开发及应用http://www.delphi2007.net/DelphiVCL/html/delphi_20061224100656157.html 像那些付费软件的注册算法一般是用什么算法?如果我想给我的软件加密,...
    像那些付费软件的注册算法一般是用什么算法? VCL组件开发及应用
    http://www.delphi2007.net/DelphiVCL/html/delphi_20061224100656157.html
    像那些付费软件的注册算法一般是用什么算法?如果我想给我的软件加密,使用那种算法比较好?前辈们给点意见啊

    //转贴  
       
      DELPHI程序注册码设计  
         
        当你辛辛苦苦用DELPHI做好了一个你认为十分不错的程序,你是否想把它发布出去成为共享软件呢?   做为一个共享软件,注册码肯定是少不了的,你可以通过判断程序是否注册来进行功能,时间或一些其它限制.现在就介绍一种简单的注册码制造方法.思路是这样的:程序运行时先检测注册表,如果找到注册项,则表明已经注册,如果没有找到注册项,则提示要求注册.    
      <注册例程>  
      在DELPHI下新建一工程,放置Edit1,Edit2,Label1,Label2,Button1组件.具体代码如下:  
      unit   Unit1;  
      interface  
      uses  
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,  
      StdCtrls,Registry;//在此加上Registry以便调用注册表.  
      type  
      TForm1   =   class(Tform)  
      Button1:   Tbutton;  
      Edit1:   Tedit;  
      Edit2:   Tedit;  
      Label1:   Tlabel;  
      Label2:   Tlabel;  
      procedure   Button1Click(Sender:   Tobject);  
      procedure   FormCreate(Sender:   Tobject);  
      private  
      Function   Check():Boolean;  
      Procedure   CheckReg();  
      Procedure   CreateReg();  
      {   Private   declarations   }  
      public  
      {   Public   declarations   }  
      end;  
      var  
      Form1:   TForm1;  
      Pname:string;   //全局变量,存放用户名和注册码.  
      Ppass:integer;  
      implementation  
      {$R   *.DFM}  
      Procedure   TForm1.CreateReg();//创建用户信息.  
      var   Rego:Tregistry;  
      begin  
      Rego:=Tregistry.Create;  
      Rego.RootKey:=HKEY_USERS;  
      rego.OpenKey('.DEFAULT\Software\AngelSoft\Demo',True);//键名为AngelSoft\Demo,可自行修改.  
      Rego.WriteString('Name',Pname);//写入用户名.  
      Rego.WriteInteger('Pass',Ppass);//写入注册码.  
      Rego.Free;  
      ShowMessage('程序已经注册,谢谢!');  
      CheckReg;   //刷新.  
      end;  
      Procedure   TForm1.CheckReg();//检查程序是否在注册表中注册.  
      var   Rego:Tregistry;  
      begin  
      Rego:=Tregistry.Create;  
      Rego.RootKey:=HKEY_USERS;  
      IF   Rego.OpenKey('.DEFAULT\Software\AngelSoft\Demo',False)   then  
      begin  
      Form1.Caption:='软件已经注册';  
      Button1.Enabled:=false;  
      Label1.Caption:=rego.ReadString('Name');//读用户名.  
      Label2.Caption:=IntToStr(Rego.ReadInteger('Pass'));   //读注册码.  
      rego.Free;  
      end  
      else   Form1.Caption:='软件未注册,请注册';  
      end;  
      Function   TForm1.Check():Boolean;//检查注册码是否正确.  
      var  
      Temp:pchar;  
      Name:string;  
      c:char;  
      I,Long,Pass:integer;  
      begin  
      Pass:=0;  
      Name:=edit1.Text;  
      long:=length(Name);  
      for   I:=1   to   Long   do  
      begin  
      temp:=pchar(copy(Name,I,1));  
      c:=temp^;  
      Pass:=Pass+ord(c);   //将用户名每个字符转换为ASCII码后相加.  
      end;  
      if   StrToInt(Edit2.Text)=pass   then  
      begin  
      Result:=True;  
      Pname:=Name;  
      Ppass:=Pass;  
      end  
      else   Result:=False;  
      end;  
      procedure   TForm1.Button1Click(Sender:   Tobject);  
      begin  
      if   Check   then   CreateReg  
      else   ShowMessage('注册码不正确,无法注册');  
      end;  
      procedure   TForm1.FormCreate(Sender:   Tobject);  
      begin  
      CheckReg;  
      end;  
      end.  
      <注册器>  
      在DELPHI下新建一工程,放置Edit1,Edit2,Button1组件.具体代码如下:  
      unit   Unit1;  
      interface  
      uses  
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,  
      StdCtrls;  
      type  
      TForm1   =   class(Tform)  
      Button1:   Tbutton;  
      Edit1:   Tedit;  
      Edit2:   Tedit;  
      procedure   Button1Click(Sender:   Tobject);  
      private  
      {   Private   declarations   }  
      public  
      {   Public   declarations   }  
      end;  
      var  
      Form1:   TForm1;  
      implementation  
      {$R   *.DFM}  
      procedure   TForm1.Button1Click(Sender:   Tobject);  
      var  
      Temp:pchar;  
      Name:string;  
      c:char;  
      I,Long,Pass:integer;  
      begin  
      Pass:=0;  
      Name:=edit1.Text;  
      long:=length(Name);  
      for   I:=1   to   Long   do  
      begin  
      temp:=pchar(copy(Name,I,1));  
      c:=temp^;  
      Pass:=Pass+ord(c);  
      end;  
      edit2.text:=IntToStr(pass);  
      end;  
      end.  
        从<注册器>中取得注册码,便可在<注册例程>中进行注册.原理是使用ORD函数取得用户名每单个字符的ASCII码值,并进行相加得到注册码.当然,这十分容易并破解,你可以用XOR进行异或操作,或者倒取反值...具体的要看你怎么实现了.总之,本文章只抛砖引玉罢了.  
     

    也可以用专门的控件来做  
      Regware

    破解只是时间和兴趣的问题  
       
      软件没有写成功之前考虑加密是白搭  
      一个写的差的软件就是开源给别人都没人用  
       
      加密之前提起别人破解的兴趣先

    烂软件不加密也没人用,好软件加密了照样破!  
      WinRAR加密足够牛了吧,有几个软件可以做到这个程度的?还不照样被干掉  
      共享软件作者还是提高自己的软件先,别尚未成功就开始防破解,精力用错地方了。

    找到的一个:  
       
       
      给你一个,不过是检测注册表中的值进行判断是否已经注册:  
      当然这程序中的注册码是随便写的...  
      procedure   TE_Mainf.FormCreate(Sender:   TObject);  
      var   re_id:   integer;  
          registerTemp:   TRegistry;  
          inputstr,get_id:   string;  
          dy,   clickedok:   boolean;  
          i:   double;  
      label   Y,   N;  
      begin  
          dy   :=   false;//软件是否已到注册期、及是否允许继续使用的标志,当值为FALSE是为允许使用  
          registerTemp   :=   TRegistry.Create;                 //准备使用注册表  
          with   registerTemp   do  
          begin  
              RootKey   :=   HKEY_LOCAL_MACHINE;                 //存放在此根下  
              if   OpenKey('Software\Microsoft\Windows\CurrentVersion\Mark',   True)   then   //   建一目录,存放标志值。当然也可以存放在已存在的目录下。  
              begin  
                  if   valueexists('gc_id')   then                     //用gc_id的值作为标志,首先判断其存在否  
                  begin  
                      re_id   :=   readinteger('gc_id');                       //读出标志值  
                      if   (re_id   <>   0)   and   (re_id   <>   100)   then     //若标志值为0,则说明已注册     ,若不为0且值不到100,说明虽未注册,但允许使用的次数尚未达到。  
                      begin  
                          re_id   :=   re_id   +   5;         //允许标志的最大值为100,每次加5,则最多只可用20次  
                          writeinteger('gc_id',   re_id);                     //将更新后的标志值写入注册表中  
                          i   :=   (100   -   re_id)   /   5;  
                          if   application.MessageBox(PAnsiChar('您使用的软件没有注册,还有   '   +   floattostr(i)   +   '   次使用次数,现在要注册吗?'),   '提示信息',   mb_yesno   +   mb_iconwarning)   =   idyes   then  
                          begin  
                              if   i   =   0   then  
                                  application.Terminate  
                              else  
                                  goto   y;  
                          end;  
                      end;  
                      if   re_id   =   0   then   goto   N;  
                      if   re_id   =   100   then   dy   :=   true;                     //若标志值已达到100,则应当注册  
                  end  
                  else  
                      Writeinteger('gc_id',   5);                                 //建立标志,并置初始标志值  
                  re_id   :=   readinteger('gc_id');  
                  i   :=   (100   -   re_id)   /   5;  
                  if   Application.MessageBox(PAnsiChar('您使用的软件没有注册,还有   '   +   floattostr(i)   +   '   次使用次数,现在要注册吗?'),   '提示信息',   mb_yesno   +   mb_iconwarning)   =   idyes   then  
                  begin  
                      if   i   =   0   then  
                          application.Terminate  
                      else  
                          goto   Y;  
                  end;  
              end;  
              if   dy   then  
                  Y:   begin                                 //若dy值为TRUE,则应提示用户输入注册码,进行注册  
                  clickedok   :=   InputQuery('系统提示',   '请输入注册码:',   inputstr);  
                  if   clickedok   then  
                  begin  
                      get_id   :=   inttostr(83392582   *   2);   //注册码为166785164,够简单的......  
                      if   get_id   =   inputstr   then  
                      begin  
                          Writeinteger('gc_id',   0);         //若输入的注册码正确,则将标志值置为0,即已注册  
                          Application.MessageBox('恭喜你,软件注册成功!',   '提示',   MB_OK);  
                          CloseKey;  
                          Free;  
                      end  
                      else  
                      begin  
                          application.messagebox('注册码错误!请与作者联系!',   '警告',   mb_ok   +   mb_iconstop);  
                          CloseKey;  
                          Free;  
                          application.terminate;                                   //中止程序运行,拒绝让其继续使用  
                      end;  
                  end  
                  else  
                  begin  
                      CloseKey;  
                      Free;  
                      application.terminate;                                       //中止程序运行,拒绝让其继续使用  
                  end;  
              end;  
          end;  
          N:   datamodule1   :=   tdatamodule1.Create(self);  
          if   not   assigned(E_loginf)   then  
              E_loginf   :=   tE_loginf.Create(self);  
          E_loginf.ShowModal;  
          if   E_loginf.ModalResult   =   mrCancel   then//检查返回模式,如果是关闭或是取消,则中止运行  
          begin  
                  Application.Terminate;  
                  exit;  
          end;  
      不知有没达到你要求~~  
     

    楼主,好像这个问题没固定的答案.  
      每个人都可以想个算法.

    同意4星

    呵呵,还有硬件加密狗可以加密的.

    算法自然越私有越好了  
      不然别人直接根据公开算法就算出来,你的加密就没啥意义了

    转载于:https://www.cnblogs.com/delphi2007/archive/2008/11/18/1335891.html

    展开全文
  • 10分钟制作制作炫酷Windows Android IOSDialogs对话框FMX界面 带透明度,可以将提示的内容问题和截屏任意分享至社交App 一、先看代码 unit CustomDialogsSimple1; interface uses System.SysUtils, System....

    10分钟制作制作炫酷Windows Android IOS Dialogs对话框FMX界面

    带透明度,可以将提示的内容问题和截屏任意分享至社交App

     

    一、先看代码

    unit CustomDialogsSimple1;

    interface

    uses
      System.SysUtils, System.Types, System.UITypes,
      System.Classes, System.Variants, System.Actions,
      System.Rtti,//:运行时刻库
      FMX.Types, FMX.Graphics, FMX.Controls,
      FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
      FMX.Edit, FMX.Effects, FMX.Controls.Presentation,
      FMX.Objects, FMX.Layouts,
      FMX.ScrollBox, FMX.Memo,
      FMX.ActnList, FMX.StdActns,  ,FMX.Platform //:平台服务
      ;

    type
      TframeCustomDialogsSimple1 = class(TFrame)
        LayoutDiologTranslucent: TLayout;
        RectDiologTranslucent: TRectangle;
        RectDiolog: TRectangle;
        RectDiologTitle: TRectangle;
        lblDiologTitle: TLabel;
        RectDiologToolbar: TRectangle;
        GlowEffect1: TGlowEffect;
        lblRectDiologContentTips: TLabel;
        imgDiologTitle: TImage;
        LayoutRectDiologContent: TLayout;
        MemoTips: TMemo;
        LayoutRectDiologContentTips: TLayout;
        imgRectDiologContentTips: TImage;
        RectBtnOk: TRectangle;
        imgBtnOk: TImage;
        lblBtnOk: TLabel;
        RectBtnCancel: TRectangle;
        imgBtnCancel: TImage;
        lblBtnCancel: TLabel;
        btnCancel: TRectangle;
        btnOk: TRectangle;
        RectDiologContentTips: TRectangle;
        RectBtnHelpme: TRectangle;
        imgBtnHelpme: TImage;
        lblBtnHelpme: TLabel;
        btnHelpme: TRectangle;
        imgShare: TImage;
        LayoutShare: TLayout;
        RectShare: TRectangle;
        RectBtnShareText: TRectangle;
        imgBtnShareText: TImage;
        lblBtnShareText: TLabel;
        BtnShareText: TRectangle;
        RectBtnShareTo: TRectangle;
        imgBtnShareTo: TImage;
        lblBtnShareTo: TLabel;
        BtnShareTo: TRectangle;
        LayoutShareText: TLayout;
        MemoShareText: TMemo;
        LayoutShareTextTips: TLayout;
        RectShareTextTips: TRectangle;
        imgShareTextTips: TImage;
        lblShareTextTips: TLabel;
        RectShareText: TRectangle;
        lblRectShare: TLabel;
        RectLayoutShare: TRectangle;
        SpBtnShareTo: TSpeedButton;
        procedure btnOkClick(Sender: TObject);
        procedure btnCancelClick(Sender: TObject);
        procedure btnHelpmeClick(Sender: TObject);
        procedure BtnShareTextClick(Sender: TObject);
        procedure BtnShareToClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        //供调用者传入的回调参数:
        //FTips:string;
        frameCustomDialogsSimple1:TframeCustomDialogsSimple1;
        FTControl:TControl;//:供调用者传入的截屏控件
      end;
    type
      TAProc<T> = reference to procedure(const Arg :T);
      TAFunc<T,TResult> = reference to function(const Arg :T):T;

    var FTips:string;//:传出变量

      ///<summary>本单元通用截屏方法-可做入全局库:</summary>
      procedure FMakeScreenshot(
        ATControl:TControl;AImage:TImage);

    implementation

    uses myFuc_UnifiedPlatForm;  // :我的通用库
    {$R *.fmx}

    procedure TframeCustomDialogsSimple1.btnCancelClick(Sender: TObject);
    var LAProc:TAProc<string>;
        LAFunc:TAFunc<string,Boolean>;
    begin
      //MemoRectDiologContent.Lines.Add('        你点了取消,你要做什么在你的继承代码中写匿名过程TAProc<T>或写匿名函数TAFunc<T>');
      FTips:=sLineBreak+'你点了取消:'+sLineBreak
        +'        你点了取消,你要做什么在你的继承代码中调用你写好的过程或函数';
      //:FTips:回调测试用
      self.SendToBack;
      self.Visible:=false;
    end;

    procedure TframeCustomDialogsSimple1.btnOkClick(Sender: TObject);
    var LAProc:TAProc<string>;
        LAFunc:TAFunc<string,Boolean>;
    begin
      //MemoRectDiologContent.Lines.Add('        你点了确定,你要做什么在你的继承代码中写匿名过程TAProc<T>或写匿名函数TAFunc<T>');
      FTips:=sLineBreak+'你点了确定:'+sLineBreak
        +'        你点了确定,你要做什么在你的继承代码中调用你写好的过程或函数';
      //:FTips:回调测试用
      self.SendToBack;
      self.Visible:=false;
    end;

    procedure TframeCustomDialogsSimple1.btnHelpmeClick(Sender: TObject);
    begin
      FMakeScreenshot(self.FTControl,self.imgShare);//:调截屏方法
      FTips:=sLineBreak+'你点了询问:'+sLineBreak
        +'        你点了询问,你可以用此接口截屏分享给需要帮助您的人';
      //:FTips:回调测试用
      LayoutDiologTranslucent.Visible:=true;
      RectDiolog.Visible:=false;

      LayoutShare.BringToFront;
      LayoutShare.Visible:=true;
    end;

    procedure TframeCustomDialogsSimple1.BtnShareTextClick(Sender: TObject);
    begin
      LayoutShareText.Visible:=not(LayoutShareText.Visible);
    end;

    procedure TframeCustomDialogsSimple1.BtnShareToClick(Sender: TObject);

    var LClipBoard:IFMXClipboardService; //:剪切板接口  //: FMX.Platform
        LTValue:TValue;//:设置剪切板的泛型值  //: System.Rtti
    begin
      if MemoShareText.Lines.Text.Trim<>'' then
      if TPlatformServices.Current.SupportsPlatformService(
        IFMXClipboardService,IInterface(LClipBoard) ) then
      begin
        LTValue := TValue.From(MemoShareText.Lines.Text);
        LClipBoard.SetClipboard(LTValue);
      end;
      //:剪切复制说两句的内容;界面显示处理:
      LayoutShareText.Visible:=false;

      LayoutShare.SendToBack;
      LayoutShare.Visible:=false;
      imgShare.Visible:=false;

      LayoutDiologTranslucent.Visible:=true;
      RectDiolog.Visible:=true;
    end;

    procedure FMakeScreenshot(
      ATControl:TControl;AImage:TImage);
    //本单元通用截屏方法-可做入全局库:
    var LTBitmap:TBitmap;
    begin
      LTBitmap:=ATControl.MakeScreenshot;
        //:FTControl:回调控件截屏
      AImage.Bitmap.SetSize(LTBitmap.Size);
      AImage.Bitmap.CopyFromBitmap(LTBitmap);
      AImage.Visible:=true;
    end;


    end.

     

     做出的效果:

     

     

    二、怎么做的呢?步骤:

    1、先用FMX Form临时窗体画UI界面(javaUI做的事情):

    底层Layout给透明度:

    这样布局:

     

    注意layer层之间Bringfront和SendToBack属性,

    画出这样的效果:

    2、创建Frame(javaUI做的事情):

    3、把你刚才在Form临时窗体中画的UI界面复制粘贴到上面的Frame(javaUI做的事情):

    这样的效果:

    4、Frame UI界面简单的点击事件控制界面显示规则(java前端做的事情):

    //  几句话代码(见上面蓝色标注):

    5、将上述Frame界面拖入加载到你的APP应用窗体(javaUI做的事情)

    6、写你的调用代码及逻辑代码(java后端开发做的事情):

    按钮事件代码:

    分享代码:

    一次一个分享动作:图片和文字只能二选一(除非 你做了多个动作代码,被某个Action连续调用,或者将文字画到图片中去):

    截屏传参:

    大功告成!是不是很简单呀!

     

    三、下面是在上述基础之上,附加:1、WIndows下拉起QQ、TIM、微信;2、访问注册表

    3.1、全平台拉起QQ、TIM、微信等进行分享截屏及消息对话框内容

    unit CustomDialogsSimple1;

    interface

    uses
      {$IFDEF MSWINDOWS}
      Winapi.ShellAPI,Winapi.Windows,
      RegistryWin32,
      {$ENDIF MSWINDOWS}
      System.SysUtils, System.Types, System.UITypes,
      System.Classes, System.Variants, System.Actions,
      System.IOUtils,System.Rtti,//:运行时刻库
      FMX.Types, FMX.Graphics, FMX.Controls,
      FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
      FMX.Edit, FMX.Effects, FMX.Controls.Presentation,
      FMX.Objects, FMX.Layouts,
      FMX.ScrollBox, FMX.Memo,
      FMX.ActnList, FMX.StdActns,
      FMX.Ani
      ,FMX.ImgList
      ,FMX.Platform //:平台服务
      ,myFuc_UnifiedPlatForm
      ;

    type
      TframeCustomDialogsSimple1 = class(TFrame)
        LayoutDiologTranslucent: TLayout;
        RectDiologTranslucent: TRectangle;
        RectDiolog: TRectangle;
        RectDiologTitle: TRectangle;
        lblDiologTitle: TLabel;
        RectDiologToolbar: TRectangle;
        GlowEffect1: TGlowEffect;
        lblRectDiologContentTips: TLabel;
        imgDiologTitle: TImage;
        LayoutRectDiologContent: TLayout;
        MemoTips: TMemo;
        LayoutRectDiologContentTips: TLayout;
        imgRectDiologContentTips: TImage;
        RectBtnOk: TRectangle;
        imgBtnOk: TImage;
        lblBtnOk: TLabel;
        RectBtnCancel: TRectangle;
        imgBtnCancel: TImage;
        lblBtnCancel: TLabel;
        btnCancel: TRectangle;
        btnOk: TRectangle;
        RectDiologContentTips: TRectangle;
        RectBtnHelpme: TRectangle;
        imgBtnHelpme: TImage;
        lblBtnHelpme: TLabel;
        btnHelpme: TRectangle;
        imgShare: TImage;
        LayoutShare: TLayout;
        RectShare: TRectangle;
        RectBtnShareText: TRectangle;
        imgBtnShareText: TImage;
        lblBtnShareText: TLabel;
        BtnShareText: TRectangle;
        RectBtnShareTo: TRectangle;
        imgBtnShareTo: TImage;
        lblBtnShareTo: TLabel;
        BtnShareTo: TRectangle;
        LayoutShareText: TLayout;
        MemoShareText: TMemo;
        LayoutShareTextTips: TLayout;
        RectShareTextTips: TRectangle;
        imgShareTextTips: TImage;
        lblShareTextTips: TLabel;
        RectShareText: TRectangle;
        lblRectShare: TLabel;
        RectLayoutShare: TRectangle;
        SpBtnShareTo: TSpeedButton;
        HorzScrollBox1: THorzScrollBox;
        PopupShareWindows: TPopup;
        Layout1: TLayout;
        Layout2: TLayout;
        Layout3: TLayout;
        Layout4: TLayout;
        Layout101: TLayout;
        Layout104: TLayout;
        Layout103: TLayout;
        Layout102: TLayout;
        Layout201: TLayout;
        Layout204: TLayout;
        Layout203: TLayout;
        Layout202: TLayout;
        Image101: TImage;
        Label101: TLabel;
        Image102: TImage;
        Label102: TLabel;
        btnQQ: TSpeedButton;
        btnWechat: TSpeedButton;
        ActionListShareWindows: TActionList;
        ActPopUpShareWindows: TControlAction;
        btnTIM: TSpeedButton;
        Image103: TImage;
        Label103: TLabel;
        procedure btnOkClick(Sender: TObject);
        procedure btnCancelClick(Sender: TObject);
        procedure btnHelpmeClick(Sender: TObject);
        procedure BtnShareTextClick(Sender: TObject);
        procedure BtnShareToClick(Sender: TObject);
        procedure ActPopUpShareWindowsExecute(Sender: TObject);
      private
        { Private declarations }

      public
        { Public declarations }
        //供调用者传入的回调参数:
        //FTips:string;
        frameCustomDialogsSimple1:TframeCustomDialogsSimple1;
        FTControl:TControl;  //:供调用者传入的截屏控件
        FCallmeForm:TForm; //:供调用者传入的调用本frame的窗体
        FQQisRunning:Boolean; //:QQ是否手动登录(QQ不像微信,App拉起会被腾讯安全警告,只能由浏览器打开)
        FTIMisRunning:Boolean;
      end;
    type
      TAProc<T> = reference to procedure(const Arg :T);
      TAFunc<T,TResult> = reference to function(const Arg :T):T;

    var FTips:string;//:传出变量
        FCurrShareName:string;

      ///<summary>本单元通用截屏方法-可做入全局库:</summary>
      procedure FMakeScreenshot(
        ATControl:TControl;AImage:TImage);

      //function SetRegStr(const ARootKey,AKeyName,AName,AValue
       //,AValueType:string):string;external 'ProDllWin32.dll' name 'SetRegStr';
         //:Dll方式需解决回调问题:Dll执行完主程序就自动关闭啦
    implementation

    {$R *.fmx}

    procedure TframeCustomDialogsSimple1.btnCancelClick(Sender: TObject);
    var LAProc:TAProc<string>;
        LAFunc:TAFunc<string,Boolean>;
    begin
      {$IFDEF MSWINDOWS}
        KillApp('ProAPIRegistryWin32.exe');
      {$ENDIF MSWINDOWS}
      //MemoRectDiologContent.Lines.Add('        你点了取消,你要做什么在你的继承代码中写匿名过程TAProc<T>或写匿名函数TAFunc<T>');
      FTips:=sLineBreak+'你点了取消:'+sLineBreak
        +'        你点了取消,你要做什么在你的继承代码中调用你写好的过程或函数';
      //:FTips:回调测试用
      self.SendToBack;
      self.Visible:=false;
    end;

    procedure TframeCustomDialogsSimple1.btnOkClick(Sender: TObject);
    var LAProc:TAProc<string>;
        LAFunc:TAFunc<string,Boolean>;
    begin
      {$IFDEF MSWINDOWS}
        KillApp('ProAPIRegistryWin32.exe');
      {$ENDIF MSWINDOWS}
      //MemoRectDiologContent.Lines.Add('        你点了确定,你要做什么在你的继承代码中写匿名过程TAProc<T>或写匿名函数TAFunc<T>');
      FTips:=sLineBreak+'你点了确定:'+sLineBreak
        +'        你点了确定,你要做什么在你的继承代码中调用你写好的过程或函数';
      //:FTips:回调测试用
      self.SendToBack;
      self.Visible:=false;
    end;

    procedure TframeCustomDialogsSimple1.btnHelpmeClick(Sender: TObject);
    var AAppKeyValue:string;
    begin
      {$IFDEF MSWINDOWS}
        AAppKeyValue:='ProAPIRegistryWin32.exe';
        KillApp(AAppKeyValue);
      {$ENDIF MSWINDOWS}
      FMakeScreenshot(self.FTControl,self.imgShare);//:调截屏方法
      FTips:=sLineBreak+'你点了询问:'+sLineBreak
        +'        你点了询问,你可以用此接口截屏分享给需要帮助您的人';
      //:FTips:回调测试用
      LayoutDiologTranslucent.Visible:=true;
      RectDiolog.Visible:=false;

      LayoutShare.BringToFront;
      LayoutShare.Visible:=true;
    end;

    procedure TframeCustomDialogsSimple1.BtnShareTextClick(Sender: TObject);
    begin
      LayoutShareText.Visible:=not(LayoutShareText.Visible);
    end;

    procedure TframeCustomDialogsSimple1.BtnShareToClick(Sender: TObject);
    var LClipBoard:IFMXClipboardService; //:剪切板接口 //:FMX.Platform
        LTValue:TValue;//:设置剪切板的泛型值 //:System.Rtti
    begin
      {$IFDEF MSWINDOWS}
        PopupShareWindows.Visible:=true;
      {$ELSE}
        LayoutShareText.Visible:=false;

        LayoutShare.SendToBack;
        LayoutShare.Visible:=false;
        imgShare.Visible:=false;

        LayoutDiologTranslucent.Visible:=true;
        RectDiolog.Visible:=true;
      {$ENDIF}
      //:界面显示处理;剪切复制说两句的内容:

      if MemoShareText.Lines.Text.Trim<>'' then
      if TPlatformServices.Current.SupportsPlatformService(
        IFMXClipboardService,IInterface(LClipBoard) ) then
      begin
        LTValue := TValue.From(MemoShareText.Lines.Text);
        LClipBoard.SetClipboard(LTValue);
      end;

    end;

    procedure TframeCustomDialogsSimple1.ActPopUpShareWindowsExecute(
      Sender: TObject);
      {$IFDEF MSWINDOWS}
    var AAppKeyValue:string;
        LNativeUInt:NativeUInt;
      {$ENDIF MSWINDOWS}
    begin
      {$IFDEF MSWINDOWS}
        //MemoTips.Lines.Add(Sender.ToString);
        try
          if (Sender as TControlAction).Target.Name='btnQQ' then
          begin
            try
              if FQQisRunning=false then
              begin
                //MemoTips.Lines.Add('QQ未运行');
                AAppKeyValue:='QQ.exe';
                try
                  try
                    FQQisRunning:=AppRunning(AAppKeyValue);
                  except
                    //
                  end;
                finally
                  if FQQisRunning=false then
                  begin
                    ShowAMessage('请先手动登录您的QQ',procedure begin end);
                    Abort;
                  end;
                end;
              end;
            finally
              if FQQisRunning=True then
              begin
                //MemoTips.Lines.Add('QQ已运行');
                AAppKeyValue:='';
                FCurrShareName:='tencent://Message/?Uin=461655651&websiteName=q-zone.qq.com&Menu=yes';
                //:测试纸适用Win32://ShellExecute(0, 'open','IExplore.EXE', PWideChar(WideString(FCurrShareName)), nil, SW_SHOWNORMAL);
                try
                  ExeURL(AAppKeyValue,PWideChar(WideString(FCurrShareName)),SW_SHOWNORMAL);
                  //:QQ是否手动登录(QQ不像微信,
                    //:App拉起会被腾讯安全警告,只能由浏览器打开)
                finally
                  FCallmeForm.Activate; self.SetFocus;
                end;

              end;
            end;
          end;
          if (Sender as TControlAction).Target.Name='btnTIM' then
          begin
            try
              if FTIMisRunning=false then
              begin
                //MemoTips.Lines.Add('TIM未运行');
                AAppKeyValue:='TIM.exe';
                try
                  try
                    FTIMisRunning:=AppRunning(AAppKeyValue);
                  except
                    //
                  end;
                finally
                  if FTIMisRunning=false then
                  begin
                    ShowAMessage('请先手动登录您的qq办公版TIM',procedure begin end);
                    Abort;
                  end;
                end;
              end;
            finally
              if FTIMisRunning=True then
              begin
                //MemoTips.Lines.Add('TIM已运行');
                AAppKeyValue:='';
                FCurrShareName:='tencent://Message/?Uin=461655651&websiteName=q-zone.qq.com&Menu=yes';
                //:测试纸适用Win32://ShellExecute(0, 'open','IExplore.EXE', PWideChar(WideString(FCurrShareName)), nil, SW_SHOWNORMAL);
                try
                  ExeURL(AAppKeyValue,PWideChar(WideString(FCurrShareName)),SW_SHOWNORMAL);
                  //:QQ是否手动登录(QQ不像微信,
                    //:App拉起会被腾讯安全警告,只能由浏览器打开)
                finally
                  FCallmeForm.Activate; self.SetFocus;
                end;

              end;
            end;
          end;

          if (Sender as TControlAction).Target.Name='btnWechat' then
          begin
            FCurrShareName:='WeChat';

            AAppKeyValue:='ProAPIRegistryWin32.exe';
              //:AAppKeyValue:若参数=''则不调用:
            LNativeUInt:=ExeApp(AAppKeyValue,FCurrShareName,SW_SHOW);
            //LNativeUInt:=ExeApp(AAppKeyValue,'WeChat',SW_SHOW);
              //:(SW_HIDE,SW_SHOW,...)
            //if LNativeUInt.ToString.Trim<>'' then
              //MemoTips.Lines.Add(LNativeUInt.ToString.Trim)
              //;
              //:LNativeUInt.ToString.Trim<>'':代表调用成功
              //ToString:System.SysUtils.TNativeUIntHelper
          end;
        finally
          LayoutShareText.Visible:=false;

          LayoutShare.SendToBack;
          LayoutShare.Visible:=false;
          imgShare.Visible:=false;

          LayoutDiologTranslucent.Visible:=true;
          RectDiolog.Visible:=true;
        end;

      PopupShareWindows.Visible:=false;
      {$ENDIF MSWINDOWS}
    end;

    procedure FMakeScreenshot(
      ATControl:TControl;AImage:TImage);
    //本单元通用截屏方法-可做入全局库:
    var LTBitmap:TBitmap;
    begin
      LTBitmap:=ATControl.MakeScreenshot;
        //:FTControl:回调控件截屏
      AImage.Bitmap.SetSize(LTBitmap.Size);
      AImage.Bitmap.CopyFromBitmap(LTBitmap);
      AImage.Visible:=true;
    end;

    //initialization

    //finalization

    end.

     

    3.2、访问Win32注册表

    unit RegistryWin32;
    {Win32 API Interface Unit}

    interface
    uses
      Winapi.Windows,Winapi.ShellAPI,
      Winapi.TlHelp32, Winapi.PsAPI,
      System.Win.Registry,//:Windows注册表类
      System.Classes,
      System.SysUtils
      ,Vcl.Controls,Vcl.Forms
      ;

      ///<summary>设置注册表制定位置(ARootKey下AKeyName)键AName值AValue:</summary>
        ///<param name="ARootKey">=注册表主键</param>
        ///<param name="ARootKey">=主键下的某个目录键</param>
        ///<param name="AName">=目录键下的数值名称</param>
        ///<param name="AValue">=目录键下的数值数据</param>
        ///<param name="AValueType">=数值数据的类型('整型','字符串型','布尔型','浮点型','日期时间型','日期型','时间型')</param>
      procedure SetRegStr(const ARootKey,AKeyName,AName,AValue
        ,AValueType:string);
      ///<summary>读取注册表制定位置(ARootKey下AAppNameKey)键值:</summary>
      procedure readRegistry(
        const ARootKey:NativeUInt;
        const AAppNameKey:string;
        const AAppKeyName:string;
        var AAppKeyValue:String );
      ///<summary>当前Windows是64位还是32位操作系统:</summary>
      ///<summary>需要注意是GetNativeSystemInfo 函数从Windows XP 开始才有,</summary>
      ///<summary>而 IsWow64Process 函数从 Windows XP with SP2以及Windows Server 2003 with SP1开始才有</summary>
      ///<summary>所以使用该函数的时候最好用GetProcAddress:</summary>
      function IsWin64: string;

      ///<summary>Windows获取操作系统优先级:</summary>
      procedure GetPrivilege;
      ///<summary>Windows提示关机、强制关机、重启:</summary>
      procedure RebootSystem(const RebootStyle:string='重启');
      //调用ZwShutdownSystem()函数后,会通知硬件驱动保存内核数据,注册表和文件的缓存将会刷新到磁盘上,
      //然后将立即重启或关机,未保存的应用程序数据将丢失。
      //由于ZwShutdownSystem()通知硬件驱动后是瞬间关机的。为了系统与硬件的安全,
      //应使用ExitWindowsEx()进行正常关机。
      function RtlAdjustPrivilege(Privilege: ULONG; Enable: BOOLEAN;
                 CurrentThread: BOOLEAN; Enabled: PBOOLEAN): DWORD; stdcall; external 'ntdll.dll';
      function ZwShutdownSystem(arg: DWORD): BOOLEAN; stdcall; external 'ntdll.dll';

      ///<summary>Win32执行一个外部应用:</summary>
        ///<param name="AppName">=外部应用全路径名称</param>
        ///<param name="AppParamStr">=向App传入的参数:ParamStr(0)不能调用(系统默认APP根目录):ParamStr(1)...ParamStr(N),可由分隔符代码调用</param>
        ///<param name="AShowWindowStyle">=(SW_HIDE,SW_SHOW,...)App显示方式</param>
      function ExeApp(var AppName:string;const AppParamStr:string;const AShowWindowStyle:NativeUInt):NativeUInt;

      function ExeURL(
        var AppName:string;
        const AppParamStr:string;
        const AShowWindowStyle:NativeUInt):NativeUInt;
      ///<summary>Win32强行杀死一个外部应用:</summary>
        ///<param name="AppName">=外部应用全路径名称</param>
      procedure KillApp(const AppName:string);
      procedure KillProcess(ExeName: string);

      function AppRunning(var AppName:string):Boolean;
    implementation

    procedure SetRegStr(const ARootKey,AKeyName,AName,AValue
      ,AValueType:string);
    var Reg: TRegistry; AOldValue:string;
    //比如AName:=EnableLUA
    //比如AKeyName:='Software\Microsoft\Windows\CurrentVersion\Policies\System'
    //AValueType:=('整型','字符串型','布尔型','浮点型','日期时间型','日期型','时间型')
    begin
      Reg := TRegistry.Create;
      try
        if ARootKey='HKEY_LOCAL_MACHINE' then
          Reg.RootKey := HKEY_LOCAL_MACHINE;
        Reg.OpenKey(AKeyName ,true);
        if not Reg.ValueExists(AName) then
        begin
          if AValueType='整型' then Reg.WriteInteger(AName,StrToInt(AValue));
          if AValueType='字符串型' then Reg.WriteString(AName,AValue);
          if AValueType='浮点型' then Reg.WriteFloat(AName,StrToFloat(AValue));
          if AValueType='日期时间型' then Reg.WriteDateTime(AName,StrToDateTime(AValue));
          if AValueType='日期型' then Reg.WriteDate(AName,StrToDate(AValue));
          if AValueType='时间型' then Reg.WriteTime(AName,StrToTime(AValue));
        end else
        begin
          if AValueType='整型' then
          begin
            AOldValue:=IntToStr(Reg.ReadInteger(AName));
            Reg.DeleteValue(AOldValue);
            Reg.WriteInteger(AName,StrToInt(AValue));
          end;
          if AValueType='字符串型' then
          begin
            AOldValue:=(Reg.ReadString(AName));
            Reg.DeleteValue(AOldValue);
            Reg.WriteString(AName,(AValue));
          end;
          if AValueType='浮点型' then
          begin
            AOldValue:=FloatToStr(Reg.ReadFloat(AName));
            Reg.DeleteValue(AOldValue);
            Reg.WriteFloat(AName,StrToFloat(AValue));
          end;
          if AValueType='日期时间型' then
          begin
            AOldValue:=DateTimeToStr(Reg.ReadDateTime(AName));
            Reg.DeleteValue(AOldValue);
            Reg.WriteDateTime(AName,StrToDateTime(AValue));
          end;
          if AValueType='时间型' then
          begin
            AOldValue:=TimeToStr(Reg.ReadTime(AName));
            Reg.DeleteValue(AOldValue);
            Reg.WriteTime(AName,StrToTime(AValue));
          end;
        end;
      finally
        Reg.CloseKey;
        Reg.Free;
      end;
    end;

    procedure readRegistry(
      const ARootKey:NativeUInt;
      const AAppNameKey:string;
      const AAppKeyName:string;
      var AAppKeyValue:String );
    //读取注册表制定位置(ARootKey下AAppNameKey)键值
    {$IFDEF MSWINDOWS}
    var
      ifIsWin64: String;
      TheReg: TRegistry;//注意:Win32 API:Windows 64-位下编译不生效的
      KeyName: String;
      ValueStr: String;
    {$ENDIF MSWINDOWS}
    begin
    {$IFDEF MSWINDOWS}
      if AAppNameKey.Trim='' then exit;
      try

        TheReg:=TRegistry.Create;
        TheReg.RootKey:=ARootKey;
          //:HKEY_LOCAL_MACHINE;//Winapi.Windows
            //:等价于:NativeUInt($80000002) //System
          //:HKEY_CURRENT_USER = HKEY(NativeUInt($80000001));
        try
          ifIsWin64:=IsWin64;
        finally
          if AAppNameKey.Trim='QQ2009' then
          begin
            KeyName := 'Software\Tencent\'
              +AAppNameKey;
          end else
          if AAppNameKey.Trim='TIM' then
          begin
            KeyName := 'Software\Tencent\'
              +AAppNameKey;
          end else
          begin
            if pos('64-bit',ifIsWin64.trim)>=0 then //='64位操作系统'
              KeyName := 'Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\'
                +AAppNameKey; //+'WeChat';
            if pos('32-bit',ifIsWin64.trim)>=0 then//='32位操作系统'
             KeyName := 'Software\Microsoft\Windows\CurrentVersion\Uninstall\'
                +AAppNameKey; //+'WeChat';
          end;
        end;
          //:Windows任意安装和卸载的位置
          //:如需知道某App的具体安装和卸载程序全路径,
            //:就需要知道其下级的注册表节点名称,如+'WeChat'
        if TheReg.OpenKey(KeyName,true) then
        begin //回调安装全路径执行文件名AAppKeyValue:
          AAppKeyValue:=(TheReg.ReadString(AAppKeyName));
          //AAppKeyValue:=(TheReg.ReadString('DisplayIcon'));
            //:DisplayIcon一般软件开发会设置其键值为安装全路径执行文件名,
              //:但也不完全:取决于开发商

        end;
      finally
        TheReg.CloseKey;
        TheReg.Free;
      end;
    {$ENDIF MSWINDOWS}
    end;

    //需要注意是GetNativeSystemInfo 函数从Windows XP 开始才有,
    //而 IsWow64Process 函数从 Windows XP with SP2 以及 Windows Server 2003 with SP1 开始才有。
    //所以使用该函数的时候最好用GetProcAddress
    function IsWin64: string;
    var LOSVer:System.SysUtils.TOSVersion;
    {$IFDEF MSWINDOWS}
    {
    var
      Kernel32Handle: THandle;
      IsWow64Process: function(Handle: THandle; var Res: BOOL): BOOL; stdcall;
      GetNativeSystemInfo: procedure(var lpSystemInfo: TSystemInfo); stdcall;
      isWoW64: Bool;
      SystemInfo: TSystemInfo;
    const
      PROCESSOR_ARCHITECTURE_AMD64 = 9;
      PROCESSOR_ARCHITECTURE_IA64 = 6;
    }
    {$ENDIF MSWINDOWS}
    begin
      Result :=LOSVer.ToString;
    {
      Result :=
        'Name:'+LOSVer.Name
        +',ToString:'+LOSVer.ToString
        +',Build:'+IntToStr(LOSVer.Build)
        +',Major:'+IntToStr(LOSVer.Major)
        +',Minor:'+IntToStr(LOSVer.Minor)
        +',ServicePackMajor:'+IntToStr(LOSVer.ServicePackMajor)
        +',ServicePackMinor:'+IntToStr(LOSVer.ServicePackMinor)
        ; }
    (*
    //{$IFDEF MSWINDOWS}
      {
      Kernel32Handle := GetModuleHandle('KERNEL32.DLL');
      if Kernel32Handle = 0 then Kernel32Handle := LoadLibrary('KERNEL32.DLL');
      if Kernel32Handle <> 0 then
      }
    if LOSVer.Platform in [pfWindows,pfWinRT] then
    begin

      if LOSVer.Architecture in [arIntelX64,arARM64]  //(LOSVer.Architecture=TOSVersion.TArchitecture.arIntelX64)
        //or (LOSVer.Architecture=TOSVersion.TArchitecture.arARM64)
      then
      begin
        {
        IsWOW64Process := GetProcAddress(Kernel32Handle,'IsWow64Process');
        GetNativeSystemInfo := GetProcAddress(Kernel32Handle,'GetNativeSystemInfo');
        if Assigned(IsWow64Process) then
        begin
          IsWow64Process(GetCurrentProcess,isWoW64);
          if (isWoW64 and Assigned(GetNativeSystemInfo)
             )=true then
          begin
            GetNativeSystemInfo(SystemInfo);
            if (  (SystemInfo.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64)
               or (SystemInfo.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_IA64)
               )
            then
            Result := '64位操作系统64位处理器' else Result := '64位操作系统32位处理器';
          end;
        end; }
        Result := '64位操作系统'+LOSVer.ToString;
      end else Result := '32位操作系统'+LOSVer.ToString;
    end;
    *)
    //{$ENDIF MSWINDOWS}

    end;


    procedure RebootSystem(const RebootStyle:string='重启');
    //:RebootStyle:Windows提示关机、强制关机、重启:
    begin
    {$IFDEF MSWINDOWS}
      GetPrivilege;
      if RebootStyle='提示关机' then
        initiateSystemShutDown(nil,nil,0,true,false);
      if RebootStyle='强制关机' then
        ExitWindowsEx(EWX_SHUTDOWN+EWX_FORCE+EWX_POWEROFF+EWX_FORCEIFHUNG, 0);
      if RebootStyle='重启' then
        ExitWindowsEx(EWX_REBOOT OR EWX_FORCE or EWX_POWEROFF or EWX_FORCEIFHUNG, 0);
    {$ENDIF MSWINDOWS}
    end;

    procedure GetPrivilege;
    {$IFDEF MSWINDOWS}
    var
      NewState:       TTokenPrivileges;
      lpLuid:         Int64;
      ReturnLength:   DWord;
      ToKenHandle:    THandle;
    {$ENDIF MSWINDOWS}
    begin
    {$IFDEF MSWINDOWS}
      OpenProcessToken(GetCurrentProcess,
                       TOKEN_ADJUST_PRIVILEGES
                       OR TOKEN_ALL_ACCESS
                       OR STANDARD_RIGHTS_REQUIRED
                       OR TOKEN_QUERY,ToKenHandle);
      LookupPrivilegeValue(nil,'SeShutdownPrivilege',lpLuid);
      NewState.PrivilegeCount:=1;
      NewState.Privileges[0].Luid:=lpLuid;
      NewState.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
      ReturnLength:=0;
      AdjustTokenPrivileges(ToKenHandle,False,NewState,0,nil,ReturnLength);
    {$ENDIF MSWINDOWS}
    end;

    function ExeApp(var AppName:string;
      const AppParamStr:string;
      const AShowWindowStyle:NativeUInt):NativeUInt;
    var LHandle:HWND;
        StartInfo:STARTUPINFO;
    begin
      //AShowWindowStyle:=(SW_HIDE,SW_SHOW,...)
      //AppParamStr:向App传入的参数:ParamStr(0)不能调用,系统默认APP根目录
        //:ParamStr(1)...ParamStr(N),可由分隔符代码调用
    {$IFDEF MSWINDOWS}
      if AppName.Trim='' then exit;
          LHandle:=0;
          Result:=
          ShellExecute(LHandle,'open'
            ,PWideChar(WideString(AppName))
            ,PWideChar(WideString(AppParamStr))//:向App传入的参数
            ,nil  //:App默认目录
            ,AShowWindowStyle //:App显示方式
            );

    {$ENDIF MSWINDOWS}
    end;

    function ExeURL(
      var AppName:string;
      const AppParamStr:string;
      const AShowWindowStyle:NativeUInt):NativeUInt;
    var LHandle:HWND;
        LNativeUInt:NativeUInt;
        //StartInfo:STARTUPINFO;
    begin
      //AShowWindowStyle:=(SW_HIDE,SW_SHOW,...)
      //AppParamStr:向App传入的参数:ParamStr(0)不能调用,系统默认APP根目录
        //:ParamStr(1)...ParamStr(N),可由分隔符代码调用
    {$IFDEF MSWINDOWS}
      if AppParamStr.Trim='' then exit;
      try
        LHandle:=0;
        LNativeUInt:=
        ShellExecute(
          0
          ,'open' //:nil:不能否则虽不影响执行但会报错
          ,'IExplore.EXE'
          ,PWideChar(WideString(AppParamStr))//:URL指令参数
          ,nil  //:App默认目录
          ,SW_SHOW //:App显示方式
          );
      except
        //
      end;
      Result:=LNativeUInt;
    {$ENDIF MSWINDOWS}
    end;

    procedure KillApp(const AppName:string);
    //Win32强行杀死一个外部应用:
    begin
      if AppName.Trim='' then exit;
        WinExec( PAnsiChar(AnsiString('cmd.exe /c taskkill /f /t /im '+AppName))
          ,sw_hide);  //AppName:比如:ProAPIRegistryWin32.exe
    end;

    procedure KillProcess(ExeName: string);
    const
      PROCESS_TERMINATE = $0001; //进程的PROCESS_TERMINATE访问权限
    var
      ContinueLoop: Boolean;
      FSnapshotHandle: THandle;
      FProcessEntry32: TProcessEntry32;
    begin
      //获取系统所有进程快照
      FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      //调用Process32First前用Sizeof(FProcessEntry32)填充FProcessEntry32.dwSize
      FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
      //获取快照中第一个进程信息并保存到FProcessEntry32结构体中
      ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
      while integer(ContinueLoop) <> 0 do //循环枚举快照中所有进程信息
      begin
        //找到要中止的进程名
        if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeName))
          or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeName))) then
           TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),FProcessEntry32.th32ProcessID), 0);     //中止进程
        ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32); //查找下一个符合条件进程
      end;
    end;

    function AppRunning(var AppName:string):Boolean;
    var
      ContinueLoop: Boolean;
      FSnapshotHandle: THandle;
      FProcessEntry32: TProcessEntry32;
      LFindmeCount:Integer;
    begin
      LFindmeCount:=0;
      //获取系统所有进程快照
      FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      //调用Process32First前用Sizeof(FProcessEntry32)填充FProcessEntry32.dwSize
      FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
      //获取快照中第一个进程信息并保存到FProcessEntry32结构体中
      ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
      while integer(ContinueLoop) <> 0 do //循环枚举快照中所有进程信息
      begin
        //找到要中止的进程名
        if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(AppName))
          or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(AppName))) then
           LFindmeCount:=LFindmeCount+1;
        ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32); //查找下一个符合条件进程
      end;
      if LFindmeCount=0 then
      begin
        Result:=False;
      end else
      begin //App已在运行:
        Result:=true;
      end;
    end;

    end.

    3.3、Windows 64-bit、Windows 32-bit编译平台兼容调用第三方App

    {Windows 64-bit、Windows 32-bit编译平台兼容调用第三方App:}
    {:让操作系统:更改UAC用户账户控制设置}
    unit APIRegistryWin32;
    interface

    uses
      Winapi.Windows,
      Winapi.ShellAPI, Winapi.Messages,
      System.SysUtils, System.Variants,
      System.Classes,  System.IOUtils,
      Vcl.Graphics,Vcl.Controls,
      Vcl.Forms, Vcl.Dialogs

      ,RegistryWin32, Vcl.StdCtrls
      ,myFuc_UnifiedPlatForm    // :我的通用库
      ;

    type
      TfrmRegistryWin32 = class(TForm)
        edtParamStr: TEdit;
        edtResultStr: TEdit;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      frmRegistryWin32: TfrmRegistryWin32;

    implementation

    {$R *.dfm}

    procedure TfrmRegistryWin32.FormCreate(Sender: TObject);
    var LAppKeyValue:string;
        LStrList:TStringList;
        LNativeUInt:NativeUInt;
    begin
      edtParamStr.Text:=System.ParamStr(1);
        //:本工程被调用程序传入的参数
      LStrList:=TStringList.Create;
      try
        try
          SetRegStr('HKEY_LOCAL_MACHINE','Software\Microsoft\Windows\CurrentVersion\Policies\System'
            ,'EnableLUA','0','整型'); //\Wow6432Node
            //:让操作系统:更改UAC用户账户控制设置
          if trim(edtParamStr.Text)='WeChat' then
            readRegistry( HKEY_LOCAL_MACHINE
              ,trim(edtParamStr.Text),'DisplayIcon',LAppKeyValue);

          if trim(edtParamStr.Text)='QQ2009' then
          begin //:未用:QQ用浏览器打开的方式:
            try
              readRegistry( HKEY_LOCAL_MACHINE
                ,trim(edtParamStr.Text),'Install',LAppKeyValue);
            finally
              LAppKeyValue:=LAppKeyValue +'\bin\QQ.exe';
            end;
          end;

          if trim(edtParamStr.Text)='TIM' then
          begin //:未用:TIM用浏览器打开的方式:
            try
              readRegistry( HKEY_LOCAL_MACHINE
                ,trim(edtParamStr.Text),'Install',LAppKeyValue);
            finally
              LAppKeyValue:=LAppKeyValue +'\bin\TIM.exe';
            end;
          end;
          //:edtParamStr.Text根据传入参数读取注册表,打开第3方应用
          //edtParamStr.Text:'WeChat'
          //:HKEY_LOCAL_MACHINE;//Winapi.Windows
            //:等价于:NativeUInt($80000002) //System
          //:HKEY_CURRENT_USER = HKEY(NativeUInt($80000001));
        finally
          try
            LNativeUInt:=ExeApp(LAppKeyValue,'',SW_HIDE);
          finally
            if LNativeUInt.ToString.Trim<>'' then //:调用完毕
            begin
              edtResultStr.Text:=LAppKeyValue+'调用完毕'+ LNativeUInt.ToString;
              LAppKeyValue:=trim(edtResultStr.Text);
            end;
          end;
          //WinExec(PAnsiChar(AnsiString(LAppKeyValue)), SW_SHOW);
        //  ShellExecute(1,'open',PWideChar(WideString(LAppKeyValue)),nil,nil,SW_SHOW);
          //WinExec(PAnsiChar(AnsiString(LAppKeyValue)), SW_SHOW);
          //:所有的原生字符串类型String转PAnsiChar都需要经过AnsiString过渡
        end;

      finally
        FreeAndNil(LStrList);
      end;
    end;

    end.

     

     

     

     

     

     

     

     

     

    展开全文
  • Improved installation process: Reduced the amount of UAC dialogs shown during installation of different components of AnyDesk. Language support: Updated translations for various languages. Remote ...

    Version 6.3.2

    2021年6月17日

    app-window-refresh-red-3ec663.svg

    Address Book Usability:

    Improved discoverability of pagination. Added option to act on single address book entry when more than one is selected.

    app-window-refresh-red-3ec663.svg

    Sound:

    AnyDesk now defaults to the highest audio quality setting.

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed automatic language detection for Ukrainian and Lithuanian. Fixed rare issues with tags in address book.

    Version 6.3.1

    2021年5月18日

    app-window-refresh-red-3ec663.svg

    Stronger password requirements:

    Passwords set via the command line now need to fullfill the same strong requirements as passwords set via the GUI.

    app-window-refresh-red-3ec663.svg

    Reset remote screen resolution:

    Offer option to reset screen resolution of remote machine after adapting it to local viewport.

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed a crash when requesting elevation. Fixed various issues with address book pagination. Fixed a crash in the recorded session player.

    Version 6.3.0

    2021年5月7日

    app-window-refresh-red-3ec663.svg

    Improved user experience:

    Improved network stability and speed.

    app-window-refresh-red-3ec663.svg

    Improved localizations:

    Improved localization for German, Czech, Portuguese and Portuguese (Brazil).

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed column sort behavior of file fransfer view. Fixed scrolling issue in chat view on Windows 10.

    Version 6.2.3

    2021年3月8日

    tag-new-red-b5e5cc.svg

    Added global security settings:

    Added global security setting to lock the remote account. If active the corresponding session setting will be ignored.

    monitor-bug-red-d7a5e7.svg

    Bugfix:

    Fixed network detection

    monitor-bug-red-d7a5e7.svg

    Bugfix:

    Fixed image glitches occurring during sessions

    monitor-bug-red-d7a5e7.svg

    Bugfix:

    Could block remote input without input permissions granted

    monitor-bug-red-d7a5e7.svg

    Bugfix:

    Could lock the remote account without input permissions granted

    app-window-refresh-red-3ec663.svg

    Updated translations:

    Updated translations for German, English and Italian

    app-window-refresh-red-3ec663.svg

    Added translations:

    Added Lithuanian translation. Many thanks to Andrius Balsevičius!

    Version 6.2.2

    2021年2月18日

    monitor-bug-red-d7a5e7.svg

    Bugfix:

    Fixed crash when opening installer.

    monitor-bug-red-d7a5e7.svg

    Bugfix:

    Fixed crash when opening settings in in-only Cutsom Clients.

    Version 6.2.1

    2021年2月12日

    app-window-refresh-red-3ec663.svg

    Custom clients usability improvement:

    Added UI setting to permanently remove tiles from the main view of custom clients related to password for unattended access, Whats new and Discovery.

    monitor-bug-red-d7a5e7.svg

    Address Book entries handling:

    Added pagination to Address Book to fix too many entries issue.

    monitor-bug-red-d7a5e7.svg

    Bugfix:

    Fixed crash when closing a session.

    Version 6.1.5

    2021年1月27日

    monitor-bug-red-d7a5e7.svg

    Bugfix:

    Fixed bug that caused elevation requests to fail.

    Version 6.1.4

    2021年1月21日

    tag-new-red-b5e5cc.svg

    New option for unattended access:

    Added option --remove-password to remove password for unattended access via command line.

    app-window-refresh-red-3ec663.svg

    Memory usage improvement:

    Improved memory usage when using preserve details option.

    monitor-bug-red-d7a5e7.svg

    Bugs for custom clients with Incoming connection only configuration:

    Fixed window size problems in some cases in incoming connection only client. Fixed alias registration in incoming connection only clients.

    monitor-bug-red-d7a5e7.svg

    Crash during privacy mode:

    Fixed crash related to muting audio during privacy mode.

    monitor-bug-red-d7a5e7.svg

    Windows login screen keyboard issues:

    Fixed bug that caused incorrect keyboard handling on windows login screen.

    monitor-bug-red-d7a5e7.svg

    Address Book tags issue:

    Fixed bug that caused address book tags to not show on individual addresses.

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed a couple of small bugs.

    Version 6.1.0

    2020年12月8日

    tag-new-red-b5e5cc.svg

    Revised various user interface elements:

    Revised favorites and recent session lists. Revised session recording settings.

    tag-new-red-b5e5cc.svg

    Better interaction with system clipboard:

    Address Book, Auto-Discovery, Favorites and Recent Sessions now interact with the system clipboard.

    tag-new-red-b5e5cc.svg

    Added new options for sessions:

    Added option to limit number of incoming/outgoing sessions for custom clients. Added option to automatically disconnect incoming sessions when inactive.

    tag-new-red-b5e5cc.svg

    Added new options to enhance usage:

    Added option to follow remote window focus. Added display option to preserve details when encoding image. Added option to keyboard menu to send special Android keys.

    app-window-refresh-red-3ec663.svg

    One time password check improvement:

    Improved one time password checks in two factor authentication.

    monitor-bug-red-d7a5e7.svg

    Fixed crashes in various situations:

    Fixed crash when requesting elevation. Fixed crash in session player when skipping to the beginning of a recording. Fixed crash caused by invalid thumbnails when searching for addresses. Fixed crash when updating Windows Group Policies.

    monitor-bug-red-d7a5e7.svg

    Fixed bugs related to sessions:

    Fixed bug that caused keyboard mode to be reset every session. Fixed bug that caused sessions settings for remote cursor to not save correctly. Fixed bug that caused empty session recordings to be created. Fixed rare bug that caused settings configured via Group Policies to not work correctly.

    monitor-bug-red-d7a5e7.svg

    Fixed bug related to language selection:

    Fixed language detection for some asian languages. Fixed language selection on Windows XP.

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed a couple of small bugs.

    Version 6.0.8

    2020年9月1日

    app-window-refresh-red-3ec663.svg

    Improved iOS support:

    Support for improved connections to iOS devices.

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed a couple of small bugs.

    Version 6.0.7

    2020年7月28日

    monitor-bug-red-d7a5e7.svg

    AnyDesk closes immediately after start:

    Fixed bug that could cause AnyDesk to close immediately after starting.

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed a couple of small bugs.

    Version 6.0.6

    2020年7月21日

    monitor-bug-red-d7a5e7.svg

    Adress Book bugfixes:

    Fixed crash in Address Book. Fixed renaming of Address Book entries.

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed a couple of small bugs.

    Version 6.0.5

    2020年7月10日

    app-window-refresh-red-3ec663.svg

    Languages support:

    Updated translations for various languages.

    monitor-bug-red-d7a5e7.svg

    Address Book:

    Made the Address Book open on startup again.

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed a couple of small bugs.

    Version 6.0.0

    2020年6月25日

    tag-new-red-b5e5cc.svg

    Two-Factor Authentication:

    When enabled, an additional dialog will be shown after authentication by password or token, requesting a time-based one-time password provided by a third device. This feature requires an app supporting TOTP.

    tag-new-red-b5e5cc.svg

    Wake-on-Lan:

    When enabled, devices running AnyDesk that are currently in sleep mode can be woken up by other AnyDesk devices in the same local network.

    tag-new-red-b5e5cc.svg

    Windows Group Policies:

    AnyDesk now checks the Windows Registry for settings provided via Windows Domain Group Policies. This can only be disabled on Custom Clients.

    tag-new-red-b5e5cc.svg

    Multiple password for Unattented Access:

    Unattended Access now allows the setup of multiple secondary passwords. Each of the password can be bound to different permissions. This feature requires the use of Windows Group Policies.

    tag-new-red-b5e5cc.svg

    Flexible Session Recordings:

    Session Recordings can now be started and stopped at any time.

    app-window-refresh-red-3ec663.svg

    Interactive Access improvement:

    Immediately installing AnyDesk now allows to connect to that Desk directly from the beginning.

    app-window-refresh-red-3ec663.svg

    User interface improvements:

    User interface has been updated and now also allows to hide the sidebar on the left and the Remote Desk box.

    app-window-refresh-red-3ec663.svg

    Security improvement:

    AnyDesk now supports Perfect Forward Secrecy to strengthen its already strong security for data transfer.

    app-window-refresh-red-3ec663.svg

    Remote printing improvement:

    AnyDesk now allows to pring local files on the remote computer.

    app-window-refresh-red-3ec663.svg

    Multi-monitor suppport:

    Hotkeys can now be used to switch between the remote monitors. Hotkey combination Ctrl+Alt+Shift+left/right to iterate monitors. Hotkey combination Ctrl+Alt+Shift+numpad_number to switch to a specific monitor.

    app-window-refresh-red-3ec663.svg

    Improved installation process:

    Reduced the amount of UAC dialogs shown during installation of different components of AnyDesk.

    app-window-refresh-red-3ec663.svg

    Language support:

    Updated translations for various languages.

    monitor-bug-red-d7a5e7.svg

    Remote printing in Windows 7:

    Fixed a remote printing in Windows 7.

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed a lot of small bugs.

    Version 5.5.3

    2020年4月9日

    monitor-bug-red-d7a5e7.svg

    Bugfix:

    Fixed a timer duration exceeding integer boundaries.

    Version 5.5.2

    2020年4月3日

    app-window-refresh-red-3ec663.svg

    Error handling:

    Improved error handling.

    monitor-bug-red-d7a5e7.svg

    Custom client:

    Fixed Privacy Mode for Custom Clients.

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed a couple of small bugs.

    Version 5.5.0

    2020年3月11日

    tag-new-red-b5e5cc.svg

    Invitation link in main view:

    Reintroduced the invitation link in the main view. This feature requires a properly set up default mail client to work.

    tag-new-red-b5e5cc.svg

    Send support information feature:

    The link 'Send Support Information...' on the page 'About AnyDesk' in the settings now tries to create an e-mail. This feature requires a properly set up default mail client to work.

    tag-new-red-b5e5cc.svg

    Settings page:

    Added an option to set up an Alias on the UI settings page.

    tag-new-red-b5e5cc.svg

    Incoming session new feature:

    The backend user can now accept an incoming session request and immediately request elevation.

    app-window-refresh-red-3ec663.svg

    Discovery feature security:

    Significantly improved security of Discovery feature.

    app-window-refresh-red-3ec663.svg

    Session UI improvement:

    The toolbar can now be hidden during a session via the session tab menu. The remote activity indicators can now be de-/activated by clicking on them.

    monitor-bug-red-d7a5e7.svg

    File Manager:

    The File Manager enabled file upload even though it was disallowed. An additional monitor appeared on opening the File Manager.

    monitor-bug-red-d7a5e7.svg

    Custom client:

    Custom Clients may have cut ID and Alias in a list view. Custom Clients allowing only incoming sessions did not support Remote Restart.

    monitor-bug-red-d7a5e7.svg

    Service:

    Fixed a deadlock in the service making it unresponsive to session requests. Fixed a crash in the service when connecting to multiple IDs at once.

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed couple of small bugs and occasional crashes.

    Version 5.4.2

    2019年12月18日

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed some minor bugs.

    Version 5.4.0

    2019年11月21日

    tag-new-red-b5e5cc.svg

    New Privacy feature for Windows 8 and 10:

    Enabling privacy mode during a session will turn off the monitor on the remote side so the screen content is hidden.

    tag-new-red-b5e5cc.svg

    Seeking in session player:

    Session player can now jump into specific point in time.

    tag-new-red-b5e5cc.svg

    Address Book usability:

    Address Book items offer to create TCP tunnel.

    monitor-bug-red-d7a5e7.svg

    File Manager:

    File Manager address field now handles Enter key properly and shows remote folder content after switching sides.

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed automatic registration of aliases in custom namespaces and couple of other small bugs.

    Version 5.3.3

    2019年10月1日

    tag-new-red-b5e5cc.svg

    Usability:

    Address field is now in focus upon window start.

    tag-new-red-b5e5cc.svg

    Android compatibility:

    Added support for Android special keys.

    tag-new-red-b5e5cc.svg

    Translations:

    Translations have been updated.

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed couple of small bugs.

    Version 5.3.2

    2019年9月9日

    tag-new-red-b5e5cc.svg

    New set of permissions used during unattended access:

    New permissions must be enabled and will used in case session has been started using password or token.

    app-window-refresh-red-3ec663.svg

    Performance and Usability:

    Improved performance and usability of the new user interface.

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed a couple of small bugs.

    Version 5.2.2

    2019年7月12日

    tag-new-red-b5e5cc.svg

    Discovered clients in search:

    Discovered clients can be searched for now by using user name, Alias, client ID, machine name and operating system.

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed a couple of small bugs.

    Version 5.2.1

    2019年6月7日

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed a couple of small bugs.

    Version 5.2.0

    2019年6月6日

    tag-new-red-b5e5cc.svg

    Custom Client Layout:

    Added a new minimalistic layout for customer generated clients that only support incoming connections.

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed a couple of small bugs.

    Version 5.1.2

    2019年5月27日

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed a crash when AnyDesk could not find a preview image.

    app-window-refresh-red-3ec663.svg

    Welcome Panel:

    Changed images for welcome panel.

    Version 5.1.1

    2019年5月23日

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed a few major and minor bugs.

    app-window-refresh-red-3ec663.svg

    Usability:

    A couple small usability improvements.

    Version 5.1.0

    2019年5月15日

    tag-new-red-b5e5cc.svg

    TCP Tunnels:

    Added TCP Tunneling (or Port-Forwarding) for running sessions.

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed many major and minor bugs.

    app-window-refresh-red-3ec663.svg

    Performance and Usability:

    Improved performance and usability of the new user interface.

    app-window-refresh-red-3ec663.svg

    Translations:

    Improved translations.

    Version 5.0.5

    2019年4月12日

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed several bugs that occasionally lead to crashes and freezes.

    app-window-refresh-red-3ec663.svg

    Installer:

    Progressbar for the installer.

    app-window-refresh-red-3ec663.svg

    Translations:

    Updated polish translations.

    app-window-refresh-red-3ec663.svg

    Welcome Tab:

    Updated the welcome tab.

    Version 5.0.4

    2019年4月8日

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Stability improvements and fixed default audio record settings.

    Version 5.0.3

    2019年4月5日

    monitor-bug-red-d7a5e7.svg

    Bugfixes:

    Fixed many minor bugs.

    app-window-refresh-red-3ec663.svg

    Updated translations:

    Updated translations for Chinese, Portuguese, French and Russian.

    Version 5.0.2

    2019年4月4日

    monitor-bug-red-d7a5e7.svg

    Address Book:

    Fixed a few minor bugs in the Address Book.

    monitor-bug-red-d7a5e7.svg

    Command Line:

    Security improvements regarding blocking outgoing sessions.

    monitor-bug-red-d7a5e7.svg

    Auto Discovery:

    Start Auto-Discovery automatically when AnyDesk is installed.

    app-window-refresh-red-3ec663.svg

    Address Book:

    Added the right click menu.

    Version 5.0.1

    2019年3月29日

    app-window-refresh-red-3ec663.svg

    User Interface:

    Small improvements of the new user interface.

    monitor-bug-red-d7a5e7.svg

    Stability:

    Fixed a rare case that can cause AnyDesk to not respond or crash.

    monitor-bug-red-d7a5e7.svg

    Connection Trace:

    Tracefile was sometimes not stored correctly when AnyDesk is installed.

    Version 5.0.0

    2019年3月27日

    tag-new-red-b5e5cc.svg

    NEW User Interface:

    Completely new and modern design for AnyDesk with many usability improvements.

    tag-new-red-b5e5cc.svg

    Address book:

    Greatly improved address book with drag & drop and better handling.

    tag-new-red-b5e5cc.svg

    Remote Printing:

    Support for remote printing on Windows 7, 8 and 10.

    tag-new-red-b5e5cc.svg

    Auto Discovery:

    New feature that allows AnyDesk to find other clients inside your local network.

    monitor-bug-red-d7a5e7.svg

    Remote Cursor:

    Fixed bugs relating to the remote cursor and fullscreen mode.

    monitor-bug-red-d7a5e7.svg

    Stability:

    Fixed several bugs that can lead to crashes in special situations.

    app-window-refresh-red-3ec663.svg

    Localization:

    Updated translations.

    展开全文
  • 是一种软件,它可以生成简单的对话框作为包装,并设计为GNOME和控制台对话框的gdialog的替代品。 它使用GTK +和GLADE库。 此版本已移植为可在Windows系统上运行 是一种通用的diálogos软件,可简化GNOME对话框中的...
  •  如果有大量的word文档需要修改某个术语或者什么固定的语句,逐一打开是件麻烦事,利用宏可以很很快完成这项任务,而且不会错漏。对例一修改一下就可以完成这个任务。 例二:全文查找替换。 Private Sub ...
  • 这篇主要是对Pythonista的一个笼统的介绍,算是iPad编程中Python篇,后续我应该还会抽空写在iPad or iPhone 上的其他编程软件,比如支持库更多的Pyto(是另一款比较好的Python的IDE)等等。最后,感谢您的观看!
  • 【解析题】以下属于微型计算机的有()【解析题】()是指利用计算机对工业生产过程中的某些信号自动进行检测,并把检测到的数据存入计算机,再根据需要对这些数据进行处理【解析题】计算机硬件系统可以不需要软件的控制...
  • GTK+系统中的对话框(GTK+dialogs) GTK+系统中的对话框(GTK+ dialogs) 在接下来的章节中我们将着重介绍GTK+系统中的对话框。 对话框窗口是众多GUI应用程序中不可或缺的部分。对话框经常是很多人进行信息...
  • 19软件234 Android Material Design

    千次阅读 2021-03-30 07:58:50
    这里写自定义目录标题Android材料设计 Android材料设计 https://blog.csdn.net/qq_30447263/article/details/84669808
  • 第15章 防止错误,通知决定 数字革命早期,对话框和消息在软件应用的图形界面中占据着很大比例, 告诉用户他们做错了什么,或者警告用户,计算机或软件由于实际或臆想的技术限制,无法处理你的请求。如今,由于计算...
  • Many packages have "custom dialogs" which are not supported by setup.iss, which means the dialogs will always appear no matter what you do. For such packages, I suggest asking the vendor to fix ...
  • InstallShield软件详解

    2022-05-30 10:26:12
    文章目录InstallShield使用说明术语解释工程介绍InstallScriptBasic MSIInstallScript MSI如何选择适合的工程概念介绍软件功能介绍General InformationProject File FormatProduct NameProduct VersionEnable ...
  • // close all open dialogs StopTarget(); // shutdown target & communication WriteMonParms (pdbg->TargArgs); // update argument string break; case AG_RESET: // perform a reset on the target system if ...
  • FileZilla 是一个免费的 FTP 客户端软件,虽然它是免费软件,可功能却一点也不含糊,比起那些共享软件来有过之而无不及,在新的版本中作者改进了手动下载的界面和功能等,不过该软件暂时还是不支持断点续传功能。...
  • 软件设计师复习资料

    千次阅读 2019-01-27 21:18:46
    也可能是他那天正好失恋心情不好而犯迷糊,更可气的是他居然说女朋友都跟别人跑了我的程序写得那么好有什么用,我偏要这么写……所以说没有BUG的软件是不存在的(否则广大和我一样的软件测试工作者靠什么混饭吃?...
  • Function/GUI- Testing the front-end user interfaces to applications which use GUI support systems and standard Function/Error- designed to test the dialogs, alerts, and other feedback provided to the...
  • 中间件测试工具

    2021-07-26 03:29:02
    interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Tlhelp32 ; type TForm3 = class(TForm) Label1: TLabel; Edit1: TEdit; Button1: TButton; ...
  • 以下是参照万一老师的例子,做的多国语言翻译软件,可以自动判断输入的语言。软件中用到了http连接技术、json技术和xml解析技术、转化UTF8字符串。软件中还有一些问题,例如可以得到bing支持的各种语言代号,但是...
  • ① Reopen Last Project Group:使能该选项,在软件重启时将重新打开软件关闭前的工程项; ② Open Home page on start:勾选此项,在软件启动时在工作区项目卡中将单开显示“Home Page”主页,在配置时建议将不用...
  • 一款基于萌否网站 api 的音乐管理软件
  • 它是一款开源的文件夹比较和同步软件,界面直观简洁,操作简便,即使是初学者也很轻松设置就能实现文件夹的比较和同步操作。FreeFileSync 10.2主要更新通过 age 和 count 限制文件的版本号将尚未存在的文件夹提示为...
  • Dialogs, StdCtrls, ExtCtrls,strutils; Const C1= 17856; C2= 23589; type TForm1 = class(TForm) Image1: TImage; Edit1: TEdit; Label1: TLabel; Label2: TLabel; Edit2: TEdit; Button1: ...
  • 所有报错都在下面的hive日志信息里 我也考虑了文件权限的问题 可我已经将hdfs该文件的路径权限设成777 还是不行 有没有帮忙解决一下问题,我找了好久也没找到该如何解决,本人目前还在学习中qwq

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,150
精华内容 2,060
关键字:

dialogs是什么软件

友情链接: DOE.zip