请选择 进入手机版 | 继续访问电脑版

大富翁Delphi开发技术网站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2302|回复: 1

Delphi开发的CHM编译以及反编译的工具,包括代码以及编译后的程序

[复制链接]

970

主题

1459

帖子

4501

积分

论坛元老

Rank: 8Rank: 8

积分
4501
发表于 2014-2-23 15:40:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 曾经拥有 于 2014-6-16 09:14 编辑



代码介绍:
目前里面的代码只有编译chm的代码,具体功能可以看截图,包括了创建项目、打开项目、开始编译等功能

核心代码:
  1. //开始编译
  2. procedure TXSCHM_Frm.T_RunThreadOpenClick(Sender: TObject);
  3. function FileSizeByName(const AFilename: string): Int64;
  4. begin
  5.   with TFileStream.Create(AFilename, fmOpenRead or fmShareDenyNone) do
  6.   try
  7.     Result := Size;
  8.   finally Free; end;
  9. end;

  10. var
  11.   AFileName:PChar;
  12.   DestFile:String;
  13.   CHMTreeView:TTreeView;
  14. begin
  15.   if ProjectName='' then
  16.   begin
  17.     MessageBox(handle,'没有新建工程!','注意!',MB_ICONINFORMATION+MB_OK);
  18.     Exit;
  19.   end;
  20.   
  21.   if Trim(E_Title.Text)='' then
  22.   begin
  23.     MessageBox(handle,'标题没有输入!','注意!',MB_ICONINFORMATION+MB_OK);
  24.     Exit;  
  25.   end;

  26.   if Trim(M_MainContune.Text)='' then
  27.   begin
  28.     MessageBox(handle,'主页内容没有输入!','注意!',MB_ICONINFORMATION+MB_OK);
  29.     Exit;
  30.   end;

  31.   //编译过程
  32.   MemoFileList.Clear;
  33.   CallBackSystemMsg(0,'');
  34.   DestFile:=ProjectName;
  35.   CHMTitle:= E_Title.Text;
  36.   CHMTreeView:=T_View;

  37.   FHHPlist := TStringList.Create;
  38.   FHHClist := TStringList.Create;
  39.   FHHKlist := TStringList.Create;
  40.   FFileList := TStringList.Create;

  41.   try
  42.     FFileList.Add('<html>');
  43.     FFileList.Add('<head>');
  44.     FFileList.Add('<title>总目录</title>');
  45.     FFileList.Add('<meta http-equiv="Content-Type" content="text/html; charset=gb2312">');
  46.     FFileList.Add('</head>');
  47.     FFileList.Add('');
  48.     FFileList.Add('<body bgcolor="#FFFFFF">');
  49.     FFileList.Add('<PRE>');
  50.     FFileList.Add('<h1 align="center"><font face="Verdana, Arial, Helvetica, sans-serif"><b>'+E_Title.Text+'</b></font></h1>');
  51.     FFileList.Add('<hr width="100%" color="red" noshade>');
  52.     if FIsRegedit then
  53.       FFileList.Add(M_MainContune.Text)
  54.     else
  55.     begin
  56.       FFileList.Add('您使用的是未注册版本<br>');
  57.       FFileList.Add('只有注册过的才能正确显示主页内容和标题<br>');
  58.       FFileList.Add('购买注册号请联系邮箱:sbzldlb@163.com或者QQ:4968752<br>');
  59.       FFileList.Add('为了能够方便使用,请购买注册号,谢谢!<br>');
  60.       FFileList.Add('注册号是每个版本50元<br>');      
  61.     end;
  62.     FFileList.Add('<hr width="100%" color="red" noshade>');

  63.     //HHPList
  64.     FHHPlist.add('[OPTIONS]');
  65.     FHHPlist.add('Compatibility=1.1 or later');
  66.     FHHPlist.add('Compiled file=' + DestFile+'\'+ExtractFileName(DestFile)+'.chm');
  67.     FHHPlist.add('Contents file=' + DestFile + '\hhc.hhc'); // + hhcFile);
  68.     FHHPlist.add('Default Window=XSCHM123456789');
  69.     FHHPlist.add('Default topic=' + DestFile + '\index.htm'); // + ListFile);
  70.     FHHPlist.add('Display compile progress=yes');
  71.     FHHPlist.add('Full-text search=Yes');
  72.     FHHPlist.add('Index file=' + DestFile + '\hhk.hhk');
  73.     FHHPlist.add('Language='+CHMLanguage); //0x409
  74.     FHHPlist.add('Title='+CHMTitle);
  75.     FHHPlist.add('');
  76.     FHHPlist.add('');

  77.     FHHPList.Add('[WINDOWS]');
  78.     FHHPList.Add(GetFrmStyle);

  79.     FHHPlist.add('[FILES]');
  80.     FHHPlist.add(DestFile + '\index.htm');

  81.     //添加窗口样式

  82.     //FHHClist
  83.     FHHClist.Add('<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">');
  84.     FHHClist.Add('<HTML>');
  85.     FHHClist.Add('<HEAD>');
  86.     FHHClist.Add('<meta name="GENERATOR" content="Microsoft? HTML Help Workshop 4.1">');
  87.     FHHClist.Add('<!-- Sitemap 1.0 -->');
  88.     FHHClist.Add('</HEAD><BODY>');
  89.     FHHClist.Add('<OBJECT type="text/site properties">');
  90.     FHHClist.Add('  <param name="ImageType" value="Folder">');
  91.     FHHClist.Add('</OBJECT>');
  92.     FHHClist.Add('<UL>');
  93.     FHHClist.Add('  <LI> <OBJECT type="text/sitemap">');
  94.     FHHClist.Add('    <param name="Name" value="目录">');
  95.     FHHClist.Add('    <param name="Local" value="' + DestFile + '\index.htm' + '">');
  96.     FHHClist.Add('                <param name="ImageNumber" value="'+IntToStr(CHMTreeView.Items.GetFirstNode.ImageIndex+1)+'">');

  97.     FHHClist.Add('    </OBJECT>');
  98.     FHHClist.Add('<UL>');

  99.     //FHHKList
  100.     FHHKList.Add('<HTML><HEAD></HEAD><BODY>');
  101.     FHHKList.Add('<UL>');

  102.     //SearchFileList(SourceFile);
  103.     SearchFileList1(CHMTreeView.Items.GetFirstNode);

  104.     FFileList.Add('');
  105.     FFileList.Add('<hr width="100%" color="blue" noshade>');

  106.     FFileList.Add('</body>');
  107.     FFileList.Add('</PRE>');
  108.     FFileList.Add('</html>');


  109.     hhclist.Add('</UL>');
  110.     hhclist.Add('</UL>');
  111.     hhclist.Add('</UL>');
  112.     hhclist.Add('</BODY></HTML>');

  113.     hhklist.Add('</UL>');
  114.     hhklist.Add('</BODY></HTML>');

  115.     //生成文件
  116.     FFileList.SaveToFile(DestFile + '\index.htm');
  117.     FHHPlist.SaveToFile(DestFile + '\hhp.hhp');
  118.     Fhhklist.SaveToFile(DestFile + '\hhk.hhk');
  119.     Fhhclist.SaveToFile(DestFile + '\hhc.hhc');

  120.     CallBackSystemMsg(M_BulidIng,'0');

  121.     AFileName:=PChar(String(DestFile + '\hhp.hhp'));

  122.     HHA_CompileHHP(AFileName,@CompileMessage,@CompileStatus,0);

  123.     if FileExists(DestFile+'\'+ExtractFileName(DestFile)+'.chm') then
  124.     begin
  125.       CallBackSystemMsg(M_CHMFIleSize,IntToStr(FileSizeByName(DestFile+'\'+ExtractFileName(DestFile)+'.chm')));

  126.       if AutoRunChm then
  127.         ShellExecute(handle, 'Open', pchar(DestFile+'\'+ExtractFileName(DestFile)+'.chm'), nil, nil, sw_Show);
  128.     end else
  129.     begin
  130.       //CallBackSystemMsg(M_BulidIng,'0');
  131.     end;
  132.     if ISDeleteTempFile then
  133.     begin
  134.       DeleteFile(DestFile + '\index.htm');
  135.       DeleteFile(DestFile + '\hhp.hhp');
  136.       DeleteFile(DestFile + '\hhk.hhk');
  137.       DeleteFile(DestFile + '\hhc.hhc');
  138.     end;

  139.   finally
  140.     FreeAndNil(FHHPlist);
  141.     FreeAndNil(FHHClist);
  142.     FreeAndNil(FHHKlist);
  143.     FreeAndNil(FFileList);
  144.   end;
  145.   CallBackSystemMsg(1,'');
  146. end;
复制代码


转载请保留当前帖子的链接:http://www.dfwlt.com/forum.php?mod=viewthread&tid=28 谢谢!

搜索简单,分享不易,且分享且珍惜,您难道不想分享下您的心得?如果觉得本文章好的话,您可以在我们网站上注册,然后发布您的好的心得,让大家共同进步,谢谢!

最新添加

回复

使用道具 举报

970

主题

1459

帖子

4501

积分

论坛元老

Rank: 8Rank: 8

积分
4501
 楼主| 发表于 2014-2-23 15:44:54 | 显示全部楼层
界面截图:
无标题.png

代码介绍:
目前里面的代码只有编译chm的代码,具体功能可以看截图,包括了创建项目、打开项目、开始编译等功能

核心代码:
  1. //开始编译
  2. procedure TXSCHM_Frm.T_RunThreadOpenClick(Sender: TObject);
  3. function FileSizeByName(const AFilename: string): Int64;
  4. begin
  5.   with TFileStream.Create(AFilename, fmOpenRead or fmShareDenyNone) do
  6.   try
  7.     Result := Size;
  8.   finally Free; end;
  9. end;

  10. var
  11.   AFileName:PChar;
  12.   DestFile:String;
  13.   CHMTreeView:TTreeView;
  14. begin
  15.   if ProjectName='' then
  16.   begin
  17.     MessageBox(handle,'没有新建工程!','注意!',MB_ICONINFORMATION+MB_OK);
  18.     Exit;
  19.   end;
  20.   
  21.   if Trim(E_Title.Text)='' then
  22.   begin
  23.     MessageBox(handle,'标题没有输入!','注意!',MB_ICONINFORMATION+MB_OK);
  24.     Exit;  
  25.   end;

  26.   if Trim(M_MainContune.Text)='' then
  27.   begin
  28.     MessageBox(handle,'主页内容没有输入!','注意!',MB_ICONINFORMATION+MB_OK);
  29.     Exit;
  30.   end;

  31.   //编译过程
  32.   MemoFileList.Clear;
  33.   CallBackSystemMsg(0,'');
  34.   DestFile:=ProjectName;
  35.   CHMTitle:= E_Title.Text;
  36.   CHMTreeView:=T_View;

  37.   FHHPlist := TStringList.Create;
  38.   FHHClist := TStringList.Create;
  39.   FHHKlist := TStringList.Create;
  40.   FFileList := TStringList.Create;

  41.   try
  42.     FFileList.Add('<html>');
  43.     FFileList.Add('<head>');
  44.     FFileList.Add('<title>总目录</title>');
  45.     FFileList.Add('<meta http-equiv="Content-Type" content="text/html; charset=gb2312">');
  46.     FFileList.Add('</head>');
  47.     FFileList.Add('');
  48.     FFileList.Add('<body bgcolor="#FFFFFF">');
  49.     FFileList.Add('<PRE>');
  50.     FFileList.Add('<h1 align="center"><font face="Verdana, Arial, Helvetica, sans-serif"><b>'+E_Title.Text+'</b></font></h1>');
  51.     FFileList.Add('<hr width="100%" color="red" noshade>');
  52.     if FIsRegedit then
  53.       FFileList.Add(M_MainContune.Text)
  54.     else
  55.     begin
  56.       FFileList.Add('您使用的是未注册版本<br>');
  57.       FFileList.Add('只有注册过的才能正确显示主页内容和标题<br>');
  58.       FFileList.Add('购买注册号请联系邮箱:sbzldlb@163.com或者QQ:4968752<br>');
  59.       FFileList.Add('为了能够方便使用,请购买注册号,谢谢!<br>');
  60.       FFileList.Add('注册号是每个版本50元<br>');      
  61.     end;
  62.     FFileList.Add('<hr width="100%" color="red" noshade>');

  63.     //HHPList
  64.     FHHPlist.add('[OPTIONS]');
  65.     FHHPlist.add('Compatibility=1.1 or later');
  66.     FHHPlist.add('Compiled file=' + DestFile+'\'+ExtractFileName(DestFile)+'.chm');
  67.     FHHPlist.add('Contents file=' + DestFile + '\hhc.hhc'); // + hhcFile);
  68.     FHHPlist.add('Default Window=XSCHM123456789');
  69.     FHHPlist.add('Default topic=' + DestFile + '\index.htm'); // + ListFile);
  70.     FHHPlist.add('Display compile progress=yes');
  71.     FHHPlist.add('Full-text search=Yes');
  72.     FHHPlist.add('Index file=' + DestFile + '\hhk.hhk');
  73.     FHHPlist.add('Language='+CHMLanguage); //0x409
  74.     FHHPlist.add('Title='+CHMTitle);
  75.     FHHPlist.add('');
  76.     FHHPlist.add('');

  77.     FHHPList.Add('[WINDOWS]');
  78.     FHHPList.Add(GetFrmStyle);

  79.     FHHPlist.add('[FILES]');
  80.     FHHPlist.add(DestFile + '\index.htm');

  81.     //添加窗口样式

  82.     //FHHClist
  83.     FHHClist.Add('<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">');
  84.     FHHClist.Add('<HTML>');
  85.     FHHClist.Add('<HEAD>');
  86.     FHHClist.Add('<meta name="GENERATOR" content="Microsoft? HTML Help Workshop 4.1">');
  87.     FHHClist.Add('<!-- Sitemap 1.0 -->');
  88.     FHHClist.Add('</HEAD><BODY>');
  89.     FHHClist.Add('<OBJECT type="text/site properties">');
  90.     FHHClist.Add('  <param name="ImageType" value="Folder">');
  91.     FHHClist.Add('</OBJECT>');
  92.     FHHClist.Add('<UL>');
  93.     FHHClist.Add('  <LI> <OBJECT type="text/sitemap">');
  94.     FHHClist.Add('    <param name="Name" value="目录">');
  95.     FHHClist.Add('    <param name="Local" value="' + DestFile + '\index.htm' + '">');
  96.     FHHClist.Add('                <param name="ImageNumber" value="'+IntToStr(CHMTreeView.Items.GetFirstNode.ImageIndex+1)+'">');

  97.     FHHClist.Add('    </OBJECT>');
  98.     FHHClist.Add('<UL>');

  99.     //FHHKList
  100.     FHHKList.Add('<HTML><HEAD></HEAD><BODY>');
  101.     FHHKList.Add('<UL>');

  102.     //SearchFileList(SourceFile);
  103.     SearchFileList1(CHMTreeView.Items.GetFirstNode);

  104.     FFileList.Add('');
  105.     FFileList.Add('<hr width="100%" color="blue" noshade>');

  106.     FFileList.Add('</body>');
  107.     FFileList.Add('</PRE>');
  108.     FFileList.Add('</html>');


  109.     hhclist.Add('</UL>');
  110.     hhclist.Add('</UL>');
  111.     hhclist.Add('</UL>');
  112.     hhclist.Add('</BODY></HTML>');

  113.     hhklist.Add('</UL>');
  114.     hhklist.Add('</BODY></HTML>');

  115.     //生成文件
  116.     FFileList.SaveToFile(DestFile + '\index.htm');
  117.     FHHPlist.SaveToFile(DestFile + '\hhp.hhp');
  118.     Fhhklist.SaveToFile(DestFile + '\hhk.hhk');
  119.     Fhhclist.SaveToFile(DestFile + '\hhc.hhc');

  120.     CallBackSystemMsg(M_BulidIng,'0');

  121.     AFileName:=PChar(String(DestFile + '\hhp.hhp'));

  122.     HHA_CompileHHP(AFileName,@CompileMessage,@CompileStatus,0);

  123.     if FileExists(DestFile+'\'+ExtractFileName(DestFile)+'.chm') then
  124.     begin
  125.       CallBackSystemMsg(M_CHMFIleSize,IntToStr(FileSizeByName(DestFile+'\'+ExtractFileName(DestFile)+'.chm')));

  126.       if AutoRunChm then
  127.         ShellExecute(handle, 'Open', pchar(DestFile+'\'+ExtractFileName(DestFile)+'.chm'), nil, nil, sw_Show);
  128.     end else
  129.     begin
  130.       //CallBackSystemMsg(M_BulidIng,'0');
  131.     end;
  132.     if ISDeleteTempFile then
  133.     begin
  134.       DeleteFile(DestFile + '\index.htm');
  135.       DeleteFile(DestFile + '\hhp.hhp');
  136.       DeleteFile(DestFile + '\hhk.hhk');
  137.       DeleteFile(DestFile + '\hhc.hhc');
  138.     end;

  139.   finally
  140.     FreeAndNil(FHHPlist);
  141.     FreeAndNil(FHHClist);
  142.     FreeAndNil(FHHKlist);
  143.     FreeAndNil(FFileList);
  144.   end;
  145.   CallBackSystemMsg(1,'');
  146. end;
复制代码



回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

申请友链|Archiver|手机版|小黑屋|大富翁Delphi开发技术网站 ( 苏ICP备12065705号-4

GMT+8, 2019-10-18 03:32 , Processed in 0.106597 second(s), 29 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表