unit cuUtils; interface Uses // VCL Windows, Registry, Graphics, SysUtils, Classes; function GetFileVersionInfo: string; procedure RegDeleteKeyEx(const KeyName: string); implementation function GetFileVersionInfo: string; var hVerInfo: THandle; hGlobal: THandle; AddrRes: pointer; Buf: array[0..7]of byte; MajorVersion: WORD; MinorVersion: WORD; ProductRelease: WORD; ProductBuild: WORD; begin hVerInfo:= FindResource(hInstance, '#1', RT_VERSION); if hVerInfo = 0 then Result := '0.0.0.0' else begin hGlobal := LoadResource(hInstance, hVerInfo); if hGlobal = 0 then Result := '0.0.0.0' else begin AddrRes:= LockResource(hGlobal); CopyMemory(@Buf, Pointer(Integer(AddrRes)+48), 8); MinorVersion := Buf[0] + Buf[1]*$100; MajorVersion := Buf[2] + Buf[3]*$100; ProductBuild := Buf[4] + Buf[5]*$100; ProductRelease := Buf[6] + Buf[7]*$100; Result := Format('%d.%d.%d.%d', [MajorVersion, MinorVersion, ProductRelease, ProductBuild]); FreeResource(hGlobal); end; end; end; procedure RegDeleteKeyEx(const KeyName: string); var i: Integer; Reg: TRegistry; Strings: TStrings; begin Reg := TRegistry.Create; Reg.RootKey := HKEY_CURRENT_USER; Strings := TStringList.Create; try if Reg.OpenKey(KeyName, False) then begin Reg.GetKeyNames(Strings); for i := 0 to Strings.Count-1 do begin RegDeleteKeyEx(KeyName + '\' + Strings[i]); end; Reg.CloseKey; Reg.DeleteKey(KeyName); end; finally Reg.Free; Strings.Free; end; end; end.