delphi 截取网络封包 不指定

青色咖啡 , 2010/06/20 00:06 , 个人作品 , 评论(0) , 阅读(514) , Via 本站原创
 
  1. unit fmMain; 
  2.  
  3. interface 
  4.  
  5. uses 
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  7. Dialogs, StdCtrls; 
  8.  
  9. type 
  10. TForm1 = class(TForm) 
  11. Button1: TButton; 
  12. Button2: TButton; 
  13. Edit1: TEdit; 
  14. procedure Button1Click(Sender: TObject); 
  15. procedure Button2Click(Sender: TObject); 
  16. private 
  17. { Private declarations } 
  18. public 
  19. { Public declarations } 
  20. end
  21.  
  22. var 
  23. Form1: TForm1; 
  24. InstallHook: function (SWindow: THandle):Boolean;stdcall; 
  25. UnHook: procedure;stdcall; 
  26. implementation 
  27.  
  28. {$R *.dfm} 
  29.  
  30. procedure TForm1.Button1Click(Sender: TObject); 
  31. var 
  32. ModuleHandle: THandle; 
  33. TmpWndHandle: THandle; 
  34. begin 
  35. TmpWndHandle := 0
  36. TmpWndHandle := FindWindow(nil'目标窗口的标题'); 
  37. if not isWindow(TmpWndHandle) then 
  38. begin 
  39. MessageBox(self.Handle, '没有找到窗口''!!!', MB_OK); 
  40. exit; 
  41. end
  42. ModuleHandle := LoadLibrary('Hook.dll'); 
  43. @InstallHook := GetProcAddress(ModuleHandle, 'InstallHook'); 
  44. @UnHook := GetProcAddress(ModuleHandle, 'UnHook'); 
  45. if InstallHook(FindWindow(nil'Untitled')) then 
  46. ShowMessage('Hook OK'); 
  47. end
  48.  
  49. procedure TForm1.Button2Click(Sender: TObject); 
  50. begin 
  51. UnHook 
  52. end
  53.  
  54. end.

用shellExecute 打开一个文件夹,那如何打开一个文件夹并选中指定的文件呢。
下面一个函数就可以就可以做到:
filepath:=F:\手机相关\wince\Microsoft Pocket PC 2003 SDK.msi;
ShellExecute(0, nil, PChar(‘explorer.exe’),PChar(‘/e, ‘+ ‘/select, ‘ + filepath), nil, SW_NORMAL);

delphi EXE添加数字签名 不指定

青色咖啡 , 2010/06/19 23:57 , 个人作品 , 评论(0) , 阅读(791) , Via 本站原创
 
  1. unit uMain;
  2. interface
  3.  
  4. uses
  5. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  6. Dialogs, StdCtrls;
  7.  
  8. type
  9. TForm1 = class(TForm)
  10. Button1: TButton;
  11. SelFile: TOpenDialog;
  12. EFile1: TEdit;
  13. Label1: TLabel;
  14. Label2: TLabel;
  15. EFile2: TEdit;
  16. Button2: TButton;
  17. Button3: TButton;
  18. Button4: TButton;
  19. CBbakFile: TCheckBox;
  20. Label3: TLabel;
  21. procedure Button1Click(Sender: TObject);
  22. procedure Button2Click(Sender: TObject);
  23. procedure Button3Click(Sender: TObject);
  24. procedure Button4Click(Sender: TObject);
  25. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  26. private
  27. { Private declarations }
  28. public
  29. { Public declarations }
  30. end;
  31.  
  32. var
  33. Form1: TForm1;
  34.  
  35. implementation
  36.  
  37. {$R *.dfm}
  38.  
  39. procedure ShowMessBox(pvCaptiong, pvText: string);
  40. begin
  41. MessageBox(Form1.Handle, PAnsiChar(pvText), PAnsiChar(pvCaptiong), 0);
  42. end;
  43.  
  44. function ReadHexDZ(fvFileName:string; fvHexDZ:Integer):Integer; //读取指定偏移地址十六进制数据
  45. var
  46. //vBuffer : array of byte; //没指定长度的话调用函数回出错 http://www.t522.com
  47. vBuffer : array [0..3of byte//指定长度
  48. vInt : integer;
  49. vFS : TFileStream;
  50. vStr : string;
  51. begin
  52. Result := -1 ;
  53. vStr:= '';
  54. try
  55. vFS:= TFileStream.Create(fvFileName, fmOpenRead); //以读取方式打开
  56. vFS.Position:= fvHexDZ; //设置开始位置
  57. vFS.ReadBuffer(vBuffer, SizeOf(vBuffer)); //读取数据到缓冲区
  58. for vInt:=0 to 3 do
  59. vStr:=IntToHex(vBuffer[vInt], 2) + vStr; //得到16进制  http://www.t522.com
  60. Result:= StrToInt('$'+vStr) ;
  61. except
  62. Result := -1
  63. END;
  64. vFS.Free;
  65. end;
  66.  
  67. procedure TForm1.Button1Click(Sender: TObject);
  68. begin
  69. Self.Close;
  70. end;
  71.  
  72.  
  73. procedure TForm1.Button2Click(Sender: TObject);
  74. begin
  75. SelFile.Title := '请选择含有数字签名的文件';
  76. if not SelFile.Execute then Exit;
  77. EFile1.Text := Selfile.FileName;
  78. end;
  79.  
  80. procedure TForm1.Button3Click(Sender: TObject);
  81. begin
  82. SelFile.Title := '请选择要添加数字签名的文件';
  83. if not SelFile.Execute then Exit;
  84. EFile2.Text := Selfile.FileName;
  85. end;
  86.  
  87. procedure TForm1.Button4Click(Sender: TObject);
  88. var
  89. vFile1, vFile2: string;
  90. vBuf1,vBuf2: array [0..3of Byte;
  91. vFS: TFileStream;
  92. vBufAttr: array [0..100000of PAnsiChar ;
  93. vFile2SZQMDZ,
  94. vFile1SZQMDZ, //指定数字签名的地址
  95. vFile1SZQMSizeDZ, //指定数字签名大小
  96. vSZQMDZ, //数字签名地址
  97. vBufSize:integer;//数字签名大小
  98. vStr, vNewStr, vNewStr2:string;
  99. vInt: Integer;
  100. begin
  101. vFile1:= Trim(EFile1.Text);
  102. vFile2 := Trim(EFile2.Text);
  103. if not FileExists(vFile1) or not FileExists(vFile2) then
  104. begin
  105. ShowMessBox('消息''找不到文件!');
  106. Exit;
  107. end;
  108. if CBbakFile.Checked then
  109. CopyFile(PAnsiChar(vFile2), PAnsiChar(ExtractFileName(vFile2)+'.bak'), False);
  110. vFile1SZQMDZ:= ReadHexDZ(vFile1, $3C) + $98 ; //数字签名地址
  111. vFile1SZQMSizeDZ := vFile1SZQMDZ +$4//数字签名大小地址
  112. vSZQMDZ:= ReadHexDZ(vFile1, vFile1SZQMDZ); //数字签名开始位置
  113. vBufSize := ReadHexDZ(vFile1, vFile1SZQMSizeDZ) ;
  114. //ShowMessBox(IntToStr(vFile1SZQMSizeDZ), IntToStr(vBufSize));
  115. // exit;
  116. try
  117. vFS := TFileStream.Create(vFile1, fmOpenRead);
  118. try
  119. vFS.Position:= vFile1SZQMDZ;
  120. vFS.ReadBuffer(vBuf1, 4); //得到记录数字签名所在地的缓冲区 http://www.t522.com
  121. vFS.Position:= vFile1SZQMSizeDZ;
  122. vFS.ReadBuffer(vBuf2, 4); //得到记录数字签名大小的缓冲区
  123. vFS.Position:= vSZQMDZ;
  124. vFS.ReadBuffer(vBufAttr, vBufSize); //读取数字签名数据到vbufattr
  125. finally
  126. vFS.Free;
  127. end;
  128. vFile2SZQMDZ := ReadHexDZ(vFile2, $3C) + $98;
  129. vFS := TFileStream.Create(vFile2, fmOpenReadWrite);
  130. try
  131. vFS.Position:= vFile2SZQMDZ;
  132.  
  133. vStr:= IntToHex(vFS.Size, 8);
  134. vNewStr:= Copy(vStr, 72) ;
  135. vNewStr:= vNewStr + Copy(vStr, 52) ;
  136. vNewStr:= vNewStr + Copy(vStr, 32) ;
  137. vNewStr:= vNewStr + Copy(vStr, 12) ;
  138. vNewStr2:= '';
  139. for vInt:=1 to (length(vNewStr) div 2do
  140. vNewStr2:=vNewStr2+char(strtoint('$'+copy(vNewStr,(vInt-1)*2+1,2)));
  141. vFS.WriteBuffer(Pointer(vNewStr2)^, 4); //写入数据指定数字签名所在地
  142. vFS.Position := vFile2SZQMDZ + $4;
  143. vFS.WriteBuffer(vbuf2, SizeOf(vBuf2)); //写入数据指定数字签名大小
  144. vFS.Position:= vFS.Size;
  145. vFS.WriteBuffer(vBufAttr, vBufSize);
  146. finally
  147. vFS.Free;
  148. end;
  149. ShowMessBox('消息','添加数字签名成功');
  150. except
  151. ShowMessBox('坏消息','添加数字签名出错');
  152. end;
  153. end;
  154.  
  155. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  156. begin
  157. Action:= caFree;
  158. end;
  159.  
  160. end.

 

 
  1. 很简单地在单元文件中的 initializationfinalization块中加入一句代码即可,比如要使用'Ksphonet.TTF'字体,实现如下:
  2. ……
  3. ……
  4. initialization
  5. if FileExists('Ksphonet.TTF'then AddFontResource('Ksphonet.TTF')
  6. else MessageBox(0,'找不到字体文件Ksphonet.TTF,无法正常显示字体,'严重错误',MB_OK+MB_ICONERROR);
  7. finalization
  8. RemoveFontResource('Ksphonet.TTF');
  9. end

 

...不用重装DELPHI重新使用的方法
windows操作系统经常要重装,这已经成为不争的实事。尤其是开发人员,要装一大堆东西。
如office2000,delphi,vss,cvs,powerdesigner等工具。我以前也对这种方式厌恶之极。
可以从前一段时间我自己用安装监视工具总结了一套快速重建开发环境的功能。
1delphi不用重装。只需要装一次,装好后,
    1把current_user下的borland分支备出来。
    2把local_machine下的borland分支备出来。
    3把BORdbk70.dll备份出来。这是一个调试用的,如果没有就,RUN不起来。
    4当然,还要把borland的主目录备份出来。
当重装系统后,只需要
    1复制borland的主目录到以前系统的主目录。
    2双击备份的两个注册表。
    3在 开始-》运行中。输入regsvr32 把BORdbk70.dll文件拖进去,注册。
    4ok 运行delphi
    5.在DELPHI库系统路径中,把控件的路径指上去。OK.
我用这种方式,装了多台计算机,没有任何问题,运行下常。(当然可以在别的计算机上用。只要BORLAND的主目录路径是一样的。
 

分页: 6/26 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]