亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rxverinf.pas

?? RX Library contains a large number of components, objects and routines for Borland Delphi with full
?? PAS
字號:
{*******************************************************}
{                                                       }
{         Delphi VCL Extensions (RX)                    }
{                                                       }
{         Copyright (c) 1995, 1996 AO ROSNO             }
{                                                       }
{*******************************************************}

unit RxVerInf;

{ Working with VERSIONINFO resourse type }

{$I RX.INC}

{$IFDEF RX_D3}
  {$WEAKPACKAGEUNIT}
{$ENDIF}

interface

uses Windows;

type
  TVersionLanguage = (vlArabic, vlBulgarian, vlCatalan, vlTraditionalChinese,
    vlCzech, vlDanish, vlGerman, vlGreek, vlUSEnglish, vlCastilianSpanish,
    vlFinnish, vlFrench, vlHebrew, vlHungarian, vlIcelandic, vlItalian,
    vlJapanese, vlKorean, vlDutch, vlNorwegianBokmel, vlPolish,
    vlBrazilianPortuguese, vlRhaetoRomanic, vlRomanian, vlRussian,
    vlCroatoSerbian, vlSlovak, vlAlbanian, vlSwedish, vlThai, vlTurkish,
    vlUrdu, vlBahasa, vlSimplifiedChinese, vlSwissGerman, vlUKEnglish,
    vlMexicanSpanish, vlBelgianFrench, vlSwissItalian, vlBelgianDutch,
    vlNorwegianNynorsk, vlPortuguese, vlSerboCroatian, vlCanadianFrench,
    vlSwissFrench, vlUnknown);

  TVersionCharSet = (vcsASCII, vcsJapan, vcsKorea, vcsTaiwan, vcsUnicode,
    vcsEasternEuropean, vcsCyrillic, vcsMultilingual, vcsGreek, vcsTurkish,
    vcsHebrew, vcsArabic, vcsUnknown);

{$IFNDEF WIN32}
  PVSFixedFileInfo = Pvs_FixedFileInfo;
  DWORD = Longint;
{$ENDIF}

  TLongVersion = record
    case Integer of
    0: (All: array[1..4] of Word);
    1: (MS, LS: LongInt);
  end;

{ TVersionInfo }

  TVersionInfo = class(TObject)
  private
    FFileName: PChar;
    FValid: Boolean;
    FSize: DWORD;
    FBuffer: PChar;
    FHandle: DWORD;
    procedure ReadVersionInfo;
    function GetFileName: string;
    procedure SetFileName(const Value: string);
    function GetTranslation: Pointer;
    function GetFixedFileInfo: PVSFixedFileInfo;
    function GetFileLongVersion: TLongVersion;
    function GetProductLongVersion: TLongVersion;
    function GetTranslationString: string;
    function GetComments: string;
    function GetCompanyName: string;
    function GetFileDescription: string;
    function GetFileVersion: string;
    function GetVersionNum: Longint;
    function GetInternalName: string;
    function GetLegalCopyright: string;
    function GetLegalTrademarks: string;
    function GetOriginalFilename: string;
    function GetProductVersion: string;
    function GetProductName: string;
    function GetSpecialBuild: string;
    function GetPrivateBuild: string;
    function GetVersionLanguage: TVersionLanguage;
    function GetVersionCharSet: TVersionCharSet;
    function GetVerFileDate: TDateTime;
  public
    constructor Create(const AFileName: string);
    destructor Destroy; override;
    function GetVerValue(const VerName: string): string;
    property FileName: string read GetFileName write SetFileName;
    property Valid: Boolean read FValid;
    property FixedFileInfo: PVSFixedFileInfo read GetFixedFileInfo;
    property FileLongVersion: TLongVersion read GetFileLongVersion;
    property ProductLongVersion: TLongVersion read GetProductLongVersion;
    property Translation: Pointer read GetTranslation;
    property VersionLanguage: TVersionLanguage read GetVersionLanguage;
    property VersionCharSet: TVersionCharSet read GetVersionCharSet;
    property VersionNum: Longint read GetVersionNum;
    property Comments: string read GetComments;
    property CompanyName: string read GetCompanyName;
    property FileDescription: string read GetFileDescription;
    property FileVersion: string read GetFileVersion;
    property InternalName: string read GetInternalName;
    property LegalCopyright: string read GetLegalCopyright;
    property LegalTrademarks: string read GetLegalTrademarks;
    property OriginalFilename: string read GetOriginalFilename;
    property ProductVersion: string read GetProductVersion;
    property ProductName: string read GetProductName;
    property SpecialBuild: string read GetSpecialBuild;
    property PrivateBuild: string read GetPrivateBuild;
    property Values[const Name: string]: string read GetVerValue;
    property VerFileDate: TDateTime read GetVerFileDate;
  end;

function LongVersionToString(const Version: TLongVersion): string;
function StringToLongVersion(const Str: string): TLongVersion;
function AppFileName: string;
function AppVerInfo: TVersionInfo;

{ Installation utility routine }

function OkToWriteModule(ModuleName: string; NewVer: Longint): Boolean;

implementation

{$IFDEF WIN32}
uses SysUtils, FileUtil, DateUtil;
{$ELSE}
uses WinTypes, WinProcs, SysUtils, FileUtil, DateUtil, VclUtils;
{$ENDIF}

function MemAlloc(Size: Longint): Pointer;
{$IFDEF WIN32}
begin
  GetMem(Result, Size);
end;
{$ELSE}
var
  Handle: THandle;
begin
  if Size < 65535 then GetMem(Result, Size)
  else begin
    Handle := GlobalAlloc(HeapAllocFlags, Size);
    Result := GlobalLock(Handle);
  end;
end;
{$ENDIF WIN32}

const
  LanguageValues: array[TVersionLanguage] of Word = ($0401, $0402, $0403,
    $0404, $0405, $0406, $0407, $0408, $0409, $040A, $040B, $040C, $040D,
    $040E, $040F, $0410, $0411, $0412, $0413, $0414, $0415, $0416, $0417,
    $0418, $0419, $041A, $041B, $041C, $041D, $041E, $041F, $0420, $0421,
    $0804, $0807, $0809, $080A, $080C, $0810, $0813, $0814, $0816, $081A,
    $0C0C, $100C, $0000);

const
  CharacterSetValues: array[TVersionCharSet] of Integer = (0, 932, 949, 950,
    1200, 1250, 1251, 1252, 1253, 1254, 1255, 1256, -1);

{ TVersionInfo }

constructor TVersionInfo.Create(const AFileName: string);
begin
  inherited Create;
  FFileName := StrPCopy(StrAlloc(Length(AFileName) + 1), AFileName);
  ReadVersionInfo;
end;

destructor TVersionInfo.Destroy;
begin
  if FBuffer <> nil then FreeMem(FBuffer, FSize);
  StrDispose(FFileName);
  inherited Destroy;
end;

procedure TVersionInfo.ReadVersionInfo;
begin
  FValid := False;
  FSize := GetFileVersionInfoSize(FFileName, FHandle);
  if FSize > 0 then
    try
      FBuffer := MemAlloc(FSize);
      FValid := GetFileVersionInfo(FFileName, FHandle, FSize, FBuffer);
    except
      FValid := False;
      raise;
    end;
end;

function TVersionInfo.GetFileName: string;
begin
  Result := StrPas(FFileName);
end;

procedure TVersionInfo.SetFileName(const Value: string);
begin
  if FBuffer <> nil then FreeMem(FBuffer, FSize);
  FBuffer := nil;
  StrDispose(FFileName);
  FFileName := StrPCopy(StrAlloc(Length(Value) + 1), Value);
  ReadVersionInfo;
end;

function TVersionInfo.GetTranslation: Pointer;
var
{$IFDEF WIN32}
  Len: UINT;
{$ELSE}
  Len: Cardinal;
{$ENDIF}
begin
  Result := nil;
  if Valid then VerQueryValue(FBuffer, '\VarFileInfo\Translation', Result, Len)
  else Result := nil;
end;

function TVersionInfo.GetTranslationString: string;
var
  P: Pointer;
begin
  Result := '';
  P := GetTranslation;
  if P <> nil then
    Result := IntToHex(MakeLong(HiWord(Longint(P^)), LoWord(Longint(P^))), 8);
end;

function TVersionInfo.GetVersionLanguage: TVersionLanguage;
var
  P: Pointer;
begin
  P := GetTranslation;
  for Result := vlArabic to vlUnknown do
    if LoWord(Longint(P^)) = LanguageValues[Result] then Break;
end;

function TVersionInfo.GetVersionCharSet: TVersionCharSet;
var
  P: Pointer;
begin
  P := GetTranslation;
  for Result := vcsASCII to vcsUnknown do
    if HiWord(Longint(P^)) = CharacterSetValues[Result] then Break;
end;

function TVersionInfo.GetFixedFileInfo: PVSFixedFileInfo;
var
{$IFDEF WIN32}
  Len: UINT;
{$ELSE}
  Len: Cardinal;
{$ENDIF}
begin
  Result := nil;
  if Valid then VerQueryValue(FBuffer, '\', Pointer(Result), Len)
  else Result := nil;
end;

function TVersionInfo.GetProductLongVersion: TLongVersion;
begin
  Result.MS := FixedFileInfo^.dwProductVersionMS;
  Result.LS := FixedFileInfo^.dwProductVersionLS;
end;

function TVersionInfo.GetFileLongVersion: TLongVersion;
begin
  Result.MS := FixedFileInfo^.dwFileVersionMS;
  Result.LS := FixedFileInfo^.dwFileVersionLS;
end;

function TVersionInfo.GetVersionNum: Longint;
begin
  if Valid then Result := FixedFileInfo^.dwFileVersionMS
  else Result := 0;
end;

function TVersionInfo.GetVerValue(const VerName: string): string;
var
  szName: array[0..255] of Char;
  Value: Pointer;
{$IFDEF WIN32}
  Len: UINT;
{$ELSE}
  Len: Cardinal;
{$ENDIF}
begin
  Result := '';
  if Valid then begin
    StrPCopy(szName, '\StringFileInfo\' + GetTranslationString + '\' + VerName);
    if VerQueryValue(FBuffer, szName, Value, Len) then
      Result := StrPas(PChar(Value));
  end;
end;

function TVersionInfo.GetComments: string;
begin
  Result := GetVerValue('Comments');
end;

function TVersionInfo.GetCompanyName: string;
begin
  Result := GetVerValue('CompanyName');
end;

function TVersionInfo.GetFileDescription: string;
begin
  Result := GetVerValue('FileDescription');
end;

function TVersionInfo.GetFileVersion: string;
begin
  Result := GetVerValue('FileVersion');
  if (Result = '') and Valid then
    Result := LongVersionToString(FileLongVersion);
end;

function TVersionInfo.GetInternalName: string;
begin
  Result := GetVerValue('InternalName');
end;

function TVersionInfo.GetLegalCopyright: string;
begin
  Result := GetVerValue('LegalCopyright');
end;

function TVersionInfo.GetLegalTrademarks: string;
begin
  Result := GetVerValue('LegalTrademarks');
end;

function TVersionInfo.GetOriginalFilename: string;
begin
  Result := GetVerValue('OriginalFilename');
end;

function TVersionInfo.GetProductVersion: string;
begin
  Result := GetVerValue('ProductVersion');
  if (Result = '') and Valid then
    Result := LongVersionToString(ProductLongVersion);
end;

function TVersionInfo.GetProductName: string;
begin
  Result := GetVerValue('ProductName');
end;

function TVersionInfo.GetSpecialBuild: string;
begin
  Result := GetVerValue('SpecialBuild');
end;

function TVersionInfo.GetPrivateBuild: string;
begin
  Result := GetVerValue('PrivateBuild');
end;

function TVersionInfo.GetVerFileDate: TDateTime;
begin
  if FileExists(FileName) then
    Result := FileDateTime(FileName)
  else Result := NullDate;
end;

{ Long version string routines }

function LongVersionToString(const Version: TLongVersion): string;
begin
  with Version do
    Result := Format('%d.%d.%d.%d', [All[2], All[1], All[4], All[3]]);
end;

function StringToLongVersion(const Str: string): TLongVersion;
var
  Sep: Integer;
  Tmp, Fragment: string;
  I: Word;
begin
  Tmp := Str;
  for I := 1 to 4 do begin
    Sep := Pos('.', Tmp);
    if Sep = 0 then Sep := Pos(',', Tmp);
    if Sep = 0 then Fragment := Tmp
    else begin
      Fragment := Copy(Tmp, 1, Sep - 1);
      Tmp := Copy(Tmp, Sep + 1, MaxInt);
    end;
    if Fragment = '' then Result.All[I] := 0
    else Result.All[I] := StrToInt(Fragment);
  end;
  I := Result.All[1];
  Result.All[1] := Result.All[2];
  Result.All[2] := I;
  I := Result.All[3];
  Result.All[3] := Result.All[4];
  Result.All[4] := I;
end;

function AppFileName: string;
var
  FileName: array[0..255] of Char;
begin
  if IsLibrary then begin
    GetModuleFileName(HInstance, FileName, SizeOf(FileName) - 1);
    Result := StrPas(FileName);
  end
  else Result := ParamStr(0);
end;

function AppVerInfo: TVersionInfo;
begin
  Result := TVersionInfo.Create(AppFileName);
end;

{ Installation utility routines }

function OkToWriteModule(ModuleName: string; NewVer: Longint): Boolean;
{ Return True if it's ok to overwrite ModuleName with NewVer }
begin
  {Assume we should overwrite}
  OkToWriteModule := True;
  with TVersionInfo.Create(ModuleName) do begin
    try
      if Valid then {Should we overwrite?}
        OkToWriteModule := NewVer > VersionNum;
    finally
      Free;
    end;
  end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品欧美经典| 久久久精品人体av艺术| 亚洲图片欧美色图| 色综合久久久久综合99| 一区二区三区在线影院| 欧美日韩视频在线一区二区 | www.性欧美| 亚洲日韩欧美一区二区在线| 91成人网在线| 日本大胆欧美人术艺术动态| 亚洲精品一区二区三区99| 国产成人免费视频网站 | 久久久国产一区二区三区四区小说 | 国产午夜精品理论片a级大结局 | 一个色综合av| 在线电影一区二区三区| 久久国产夜色精品鲁鲁99| 中文字幕精品—区二区四季| 欧美在线观看18| 另类综合日韩欧美亚洲| 国产精品色哟哟网站| 欧美亚洲禁片免费| 国内一区二区视频| 亚洲综合在线免费观看| 欧美一级片在线观看| 波多野结衣精品在线| 天堂成人国产精品一区| 久久久精品黄色| 欧美伊人久久久久久久久影院 | 天天色天天操综合| 久久精品日产第一区二区三区高清版| 91美女片黄在线观看| 免费成人av在线| 亚洲精品视频观看| 欧美电影免费观看高清完整版在线 | 精品国产一区久久| 欧美在线三级电影| 国产伦精品一区二区三区免费迷| 亚洲一区日韩精品中文字幕| 久久人人爽人人爽| 欧美另类高清zo欧美| 99免费精品在线观看| 美国毛片一区二区| 一区二区免费看| 亚洲国产精品t66y| 日韩欧美亚洲国产另类| 色婷婷av一区二区三区软件| 国产91精品露脸国语对白| 午夜精品福利一区二区三区av| 欧美高清在线视频| 精品va天堂亚洲国产| 欧美日韩日日夜夜| 色婷婷综合久久| 懂色av中文字幕一区二区三区| 青青国产91久久久久久| 亚洲一区二区在线播放相泽 | 久久久精品影视| 日韩欧美高清dvd碟片| 在线精品视频小说1| www.成人网.com| 国产精品一区二区在线观看不卡| 日韩不卡免费视频| 亚洲 欧美综合在线网络| 亚洲天堂2014| 成人免费一区二区三区视频| 久久久99精品免费观看不卡| 精品福利一二区| 久久综合色婷婷| 久久在线观看免费| 精品三级在线看| 欧美成人r级一区二区三区| 91精品国产欧美一区二区成人 | 亚洲成人免费视| 亚洲一区二区在线播放相泽| 夜夜嗨av一区二区三区| 亚洲人成网站影音先锋播放| 亚洲天堂精品视频| 亚洲精品国产一区二区精华液 | 69久久99精品久久久久婷婷| 欧美日韩免费视频| 欧美精选午夜久久久乱码6080| 欧美欧美午夜aⅴ在线观看| 欧美高清视频不卡网| 欧美日韩国产一区二区三区地区| 91福利视频在线| 欧美日韩国产高清一区二区三区| 欧美麻豆精品久久久久久| 91.com在线观看| 日韩欧美精品在线| 国产性天天综合网| 中文字幕一区二区三区不卡| 亚洲黄色av一区| 日韩影院在线观看| 久久99国产精品麻豆| 成人在线视频首页| 欧洲激情一区二区| 欧美一级一区二区| 国产视频不卡一区| 中文字幕字幕中文在线中不卡视频| 亚洲精品国产精品乱码不99| 日韩av在线发布| 国产在线视频不卡二| 99久久99久久免费精品蜜臀| 欧美性受xxxx黑人xyx性爽| 91麻豆精品国产91久久久久| 久久综合九色综合欧美就去吻| 国产精品久久久久久久久搜平片| 一区二区三区在线观看欧美| 另类小说视频一区二区| 成人永久aaa| 在线播放日韩导航| 欧美国产日韩a欧美在线观看| 一区二区久久久久久| 激情综合色综合久久综合| jlzzjlzz亚洲日本少妇| 欧美浪妇xxxx高跟鞋交| 中文字幕精品在线不卡| 亚洲成人av福利| 成人激情动漫在线观看| 欧美精品vⅰdeose4hd| 欧美激情一区在线| 天堂久久久久va久久久久| 成人激情图片网| 欧美一区二区精品| 亚洲欧洲综合另类| 国产麻豆日韩欧美久久| 欧美日韩电影在线播放| 亚洲国产成人自拍| 久久99久久精品| 欧美日韩黄色一区二区| 亚洲天堂久久久久久久| 韩国在线一区二区| 欧美日韩国产一级片| 国产精品传媒入口麻豆| 韩国欧美国产一区| 69久久夜色精品国产69蝌蚪网| 欧美经典一区二区三区| 视频一区在线播放| 色噜噜狠狠一区二区三区果冻| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美日韩免费一区二区三区视频| 国产精品久久99| 久久成人羞羞网站| 欧美另类变人与禽xxxxx| 亚洲人成在线播放网站岛国| 成人自拍视频在线观看| 久久久精品人体av艺术| 久久99久久久欧美国产| 日韩一区二区三| 日韩黄色小视频| 欧美性生活久久| 亚洲一区二区三区影院| caoporn国产精品| 国产精品无人区| 国产91露脸合集magnet| 久久久精品国产免大香伊| 精品一区二区三区在线播放| 国产精品一级黄| 精品久久久久久久久久久院品网| 五月婷婷色综合| 欧美美女喷水视频| 日韩电影在线一区| 91精品国产综合久久久蜜臀图片| 亚洲一区二区三区视频在线| 在线观看一区二区精品视频| 一区二区三区日韩| 欧美影院精品一区| 亚洲国产日韩a在线播放| 欧美日韩精品二区第二页| 午夜不卡在线视频| 日韩免费一区二区三区在线播放| 日韩高清一级片| 精品欧美黑人一区二区三区| 国精产品一区一区三区mba桃花| 精品蜜桃在线看| 国产精品综合二区| 国产精品久久久久婷婷二区次| av电影天堂一区二区在线观看| 国产精品看片你懂得| 91麻豆精品一区二区三区| 亚洲一区二区欧美激情| 欧美精品 国产精品| 久久国产精品免费| 国产精品麻豆欧美日韩ww| 91理论电影在线观看| 亚洲1区2区3区视频| 精品久久久久99| 成人免费高清视频在线观看| 亚洲日本va午夜在线电影| 欧美日韩一区不卡| 精品一区二区在线播放| 国产精品理论在线观看| 欧美日韩国产三级| 精品在线免费观看| 国产精品国产三级国产普通话蜜臀 | 91亚洲精品久久久蜜桃| 日本伊人色综合网| 中文字幕乱码久久午夜不卡| 欧美图片一区二区三区| 久久91精品国产91久久小草|