• 把EXE可执行文件等作为资源包含在Delphi编译文件中


    摘自我自己过去写的一段心得。

    1.编辑资源文件 *.RC
    Wave: 资源文件是声音文件;
    RCDATA: 二进制数据
    AVI: AVI动画;
    ICON: 图标文件;
    BITMAP: 位图文件;
    CURSOR: 光标文件;
    比如:
    MyWav WAVE "FileName.Wav"

    2.使用Brcc32转化为*.RES文件

    3.在工程中引用RES文件
    比如:{$R MyRes.RES}

    4.运行时读入
        通过TResourceStream ,比如TResourceStream.Create(HInstance, ResName, RT_RCDATA);
        API:LoadBitmap,LoadIcon等
        组件:Image1.Picture.Bitmap.LoadFromResourceName
    /////////////////////////////////////////////////////////
    把EXE可执行文件等作为资源包含在Delphi编译文件中2010/01/18 8:29 P.M.感觉还是挺有用的,转载保存了~~~  

    建立文本文件       TEST.RC       撰写下面的一行  
       
         AEXE     EXEFILE     c:\test.exe  
       
         存盘  
       
         copy     test.rc     到你DELPHI目录里的     bin     目录  
       
         执行     brcc32     test.rc  
         得到     test.res  
       
         copy     test.res     到你的工程目录  
       
         记得在工程文件里加上     {$R     test.res}  
       
         提取RES中的TEST.EXE的函数  
       
         procedure     extractexeres(restype,     resname,     resnewname:string);  
         var    
             res:tresourcestream;    
         begin  
             res:=tresourcestream.create(hinstance,resname,pchar(resyype));  
             res.savetofile(resnewname);  
             res.free;    
         end;  

    建立文本文件       myjpg.RC       撰写下面的一行  
       
         Hash     JPGFILE     c:\myjpg.jpg  
       
         存盘  
       
         copy     myjpg.rc     到你DELPHI目录里的     bin     目录  
       
         执行     brcc32     myjpg.rc  
         得到     myjpg.res  
       
         copy     myjpg.res     到你的工程目录  
       
         记得在工程文件里加上     {$R     myjpg.res}  
       
         提取RES中的MYJPG.jpg的函数  
       
         procedure     extractexeres(resname,     restype,     resnewname:string);  
         var    
             res:Tresourcestream;    
         begin  
             res:=Tresourcestream.create(hinstance,resname,pchar(restype));  
             res.savetofile(resnewname);  
             res.free;    
         end;  
         //这样你就可以调用resnewname这个     jpg文件了。  
         调用的时候如下:  
         Extractexeres('Hash','JPGFILE','f:\myjpg.jpg');

    换一种说法:

    1、生成一个rc文件,文件格式如下:
         rwww exefile "test.exe"     //rwww是资源名称
                                   //exefile是资源类型
                                 //text.exe是资源
       资源类型列表:
       Wave:     资源文件是声音文件; 
       RCDATA:     一般二进制文件; 
       AVI:     AVI动画; 
       ICON:     图标文件;   
       BITMAP:     位图文件;   
       CURSOR:     光标文件;
       exefile:   exe文件
       FILE:     一般文件  


    2、将delphi安装目录下bin中的brcc32.exe文件拷出,用brcc32.exe执行
         生成的rc文件,在dos窗口下 运行:brcc32 test.rc   生成正式的
         后缀为.res的次源文件

    3、在delphi中加入编译指令{$R test.res}用以编译。但注意,以上的test.exe文件
         一定要在当前路径下存在。

    4、调用:

           var
             t : TResourceStream;
           begin
             try
               t := TResourceStream.Create(HInstance,'rwww','exefile'); //其中HInstance为一个句柄常量;rwww为资源名;exefile为资源类型
               t.SaveToFile('c:\2.exe'); //保存文件成2.exe
             finally

               t.free;
             end;
           end;
    ///////////////////////////////////////////////////////////
    编辑一个 resource.rc 文件 ,里面类似如下 :

      hookdll RC_Dll YourHookDllFileName.Dll

    2: 然后用 Brcc32.exe 编译 :

      brcc32 resource.rc

      结果生成 resource.res 文件

    3: 修改窗体 Pas 或者 Dpr 文件 ,添加下面的代码 :

      {$R *.res}

      {$R resource.res}

    4: 关键的代码 :

       在窗体初始化或者工程的开头部分添加代码 :

      var

       res:tresourcestream;

       ....

       res:=tresourcestream.create(instance,'hookdll','RC_Dll');

       res.SaveToFile('YourHookDllFileName.Dll');

       res.Free;

    5: 你的程序退出的时候 :

       DeleteFile('YourHookDllFile.Dll');

    6:End

  • 相关阅读:
    js使用html2canvas实现页面截图并保存图片
    微信小程序之图片base64解码
    微信小程序之回调函数
    小程序横向滚动
    搭建vue开发环境的步骤
    检测算法简介及其原理——fast R-CNN,faster R-CNN,YOLO,SSD,YOLOv2,YOLOv3
    hadoop常用命令
    工作流调度系统Azkaban的简介和使用
    java微服务简介与实战
    mxnet快速入门教程
  • 原文地址:https://www.cnblogs.com/hssbsw/p/2397825.html
Copyright © 2020-2023  润新知