- unit fmMain;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
- type
- TForm1 = class(TForm)
- Button1: TButton;
- Button2: TButton;
- Edit1: TEdit;
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- InstallHook: function (SWindow: THandle):Boolean;stdcall;
- UnHook: procedure;stdcall;
- implementation
- {$R *.dfm}
- procedure TForm1.Button1Click(Sender: TObject);
- var
- ModuleHandle: THandle;
- TmpWndHandle: THandle;
- begin
- TmpWndHandle := 0;
- TmpWndHandle := FindWindow(nil, '目标窗口的标题');
- if not isWindow(TmpWndHandle) then
- begin
- MessageBox(self.Handle, '没有找到窗口', '!!!', MB_OK);
- exit;
- end;
- ModuleHandle := LoadLibrary('Hook.dll');
- @InstallHook := GetProcAddress(ModuleHandle, 'InstallHook');
- @UnHook := GetProcAddress(ModuleHandle, 'UnHook');
- if InstallHook(FindWindow(nil, 'Untitled')) then
- ShowMessage('Hook OK');
- end;
- procedure TForm1.Button2Click(Sender: TObject);
- begin
- UnHook
- end;
- end.
用shellExecute 打开一个文件夹,那如何打开一个文件夹并选中指定的文件呢。
下面一个函数就可以就可以做到:
filepath:=F:\手机相关\wince\Microsoft Pocket PC 2003 SDK.msi;
ShellExecute(0, nil, PChar(‘explorer.exe’),PChar(‘/e, ‘+ ‘/select, ‘ + filepath), nil, SW_NORMAL);
- unit uMain;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
- type
- TForm1 = class(TForm)
- Button1: TButton;
- SelFile: TOpenDialog;
- EFile1: TEdit;
- Label1: TLabel;
- Label2: TLabel;
- EFile2: TEdit;
- Button2: TButton;
- Button3: TButton;
- Button4: TButton;
- CBbakFile: TCheckBox;
- Label3: TLabel;
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- procedure Button4Click(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.dfm}
- procedure ShowMessBox(pvCaptiong, pvText: string);
- begin
- MessageBox(Form1.Handle, PAnsiChar(pvText), PAnsiChar(pvCaptiong), 0);
- end;
- function ReadHexDZ(fvFileName:string; fvHexDZ:Integer):Integer; //读取指定偏移地址十六进制数据
- var
- //vBuffer : array of byte; //没指定长度的话调用函数回出错 http://www.t522.com
- vBuffer : array [0..3] of byte; //指定长度
- vInt : integer;
- vFS : TFileStream;
- vStr : string;
- begin
- Result := -1 ;
- vStr:= '';
- try
- vFS:= TFileStream.Create(fvFileName, fmOpenRead); //以读取方式打开
- vFS.Position:= fvHexDZ; //设置开始位置
- vFS.ReadBuffer(vBuffer, SizeOf(vBuffer)); //读取数据到缓冲区
- for vInt:=0 to 3 do
- vStr:=IntToHex(vBuffer[vInt], 2) + vStr; //得到16进制 http://www.t522.com
- Result:= StrToInt('$'+vStr) ;
- except
- Result := -1
- END;
- vFS.Free;
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- Self.Close;
- end;
- procedure TForm1.Button2Click(Sender: TObject);
- begin
- SelFile.Title := '请选择含有数字签名的文件';
- if not SelFile.Execute then Exit;
- EFile1.Text := Selfile.FileName;
- end;
- procedure TForm1.Button3Click(Sender: TObject);
- begin
- SelFile.Title := '请选择要添加数字签名的文件';
- if not SelFile.Execute then Exit;
- EFile2.Text := Selfile.FileName;
- end;
- procedure TForm1.Button4Click(Sender: TObject);
- var
- vFile1, vFile2: string;
- vBuf1,vBuf2: array [0..3] of Byte;
- vFS: TFileStream;
- vBufAttr: array [0..100000] of PAnsiChar ;
- vFile2SZQMDZ,
- vFile1SZQMDZ, //指定数字签名的地址
- vFile1SZQMSizeDZ, //指定数字签名大小
- vSZQMDZ, //数字签名地址
- vBufSize:integer;//数字签名大小
- vStr, vNewStr, vNewStr2:string;
- vInt: Integer;
- begin
- vFile1:= Trim(EFile1.Text);
- vFile2 := Trim(EFile2.Text);
- if not FileExists(vFile1) or not FileExists(vFile2) then
- begin
- ShowMessBox('消息', '找不到文件!');
- Exit;
- end;
- if CBbakFile.Checked then
- CopyFile(PAnsiChar(vFile2), PAnsiChar(ExtractFileName(vFile2)+'.bak'), False);
- vFile1SZQMDZ:= ReadHexDZ(vFile1, $3C) + $98 ; //数字签名地址
- vFile1SZQMSizeDZ := vFile1SZQMDZ +$4; //数字签名大小地址
- vSZQMDZ:= ReadHexDZ(vFile1, vFile1SZQMDZ); //数字签名开始位置
- vBufSize := ReadHexDZ(vFile1, vFile1SZQMSizeDZ) ;
- //ShowMessBox(IntToStr(vFile1SZQMSizeDZ), IntToStr(vBufSize));
- // exit;
- try
- vFS := TFileStream.Create(vFile1, fmOpenRead);
- try
- vFS.Position:= vFile1SZQMDZ;
- vFS.ReadBuffer(vBuf1, 4); //得到记录数字签名所在地的缓冲区 http://www.t522.com
- vFS.Position:= vFile1SZQMSizeDZ;
- vFS.ReadBuffer(vBuf2, 4); //得到记录数字签名大小的缓冲区
- vFS.Position:= vSZQMDZ;
- vFS.ReadBuffer(vBufAttr, vBufSize); //读取数字签名数据到vbufattr
- finally
- vFS.Free;
- end;
- vFile2SZQMDZ := ReadHexDZ(vFile2, $3C) + $98;
- vFS := TFileStream.Create(vFile2, fmOpenReadWrite);
- try
- vFS.Position:= vFile2SZQMDZ;
- vStr:= IntToHex(vFS.Size, 8);
- vNewStr:= Copy(vStr, 7, 2) ;
- vNewStr:= vNewStr + Copy(vStr, 5, 2) ;
- vNewStr:= vNewStr + Copy(vStr, 3, 2) ;
- vNewStr:= vNewStr + Copy(vStr, 1, 2) ;
- vNewStr2:= '';
- for vInt:=1 to (length(vNewStr) div 2) do
- vNewStr2:=vNewStr2+char(strtoint('$'+copy(vNewStr,(vInt-1)*2+1,2)));
- vFS.WriteBuffer(Pointer(vNewStr2)^, 4); //写入数据指定数字签名所在地
- vFS.Position := vFile2SZQMDZ + $4;
- vFS.WriteBuffer(vbuf2, SizeOf(vBuf2)); //写入数据指定数字签名大小
- vFS.Position:= vFS.Size;
- vFS.WriteBuffer(vBufAttr, vBufSize);
- finally
- vFS.Free;
- end;
- ShowMessBox('消息','添加数字签名成功');
- except
- ShowMessBox('坏消息','添加数字签名出错');
- end;
- end;
- procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
- begin
- Action:= caFree;
- end;
- end.
- 很简单地在单元文件中的 initialization和finalization块中加入一句代码即可,比如要使用'Ksphonet.TTF'字体,实现如下:
- ……
- ……
- initialization
- if FileExists('Ksphonet.TTF') then AddFontResource('Ksphonet.TTF')
- else MessageBox(0,'找不到字体文件Ksphonet.TTF,无法正常显示字体,'严重错误',MB_OK+MB_ICONERROR);
- finalization
- RemoveFontResource('Ksphonet.TTF');
- 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的主目录路径是一样的。
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的主目录路径是一样的。






