WINREG.PAS
上传用户:yuandong
上传日期:2022-08-08
资源大小:954k
文件大小:12k
源码类别:

Delphi控件源码

开发平台:

C++ Builder

  1. unit WinReg;
  2. // Title  : Access class for Windows registry
  3. // Author : Dave White
  4. // Date   : 24 April 1996
  5. //
  6. // Portions of this code are Copyright (c) Borland International, 1996
  7. //
  8. // This code is Freeware and may be used in any commercial or non-commercial applications
  9. // at no charge.  Dave White shall not be liable in any way for any failure of this software,
  10. // or any adverse effects it has on you application - you have the source :-)
  11. interface
  12. uses
  13.   Windows, Classes, Messages, SysUtils, Registry;
  14. type
  15.   TWinRegistry = class(TRegistry)
  16.   private
  17.     FFileName: string;
  18.   public
  19.     // default constructor sets root key to HKEY_CURRENT_USER
  20.     constructor Create(const FileName: string);
  21.     // alternative constructor, allows user to specify the rootkey
  22.     constructor CreateWithKey(key : HKEY; const FileName: string);
  23.     function  ReadString(const Section, Ident, Default: string): string;
  24.     function  ReadInteger(const Section, Ident: string; Default: Longint): Longint;
  25.     function  ReadBool(const Section, Ident: string; Default: Boolean): Boolean;
  26.     function  ReadCurrency(const Section, Ident: string; Default: Currency): Currency;
  27.     function  ReadBinaryData(const Section, Ident: string; var Buffer; BufSize: Integer): Integer;
  28.     function  ReadDate(const Section, Ident: string; Default: TDateTime): TDateTime;
  29.     function  ReadDateTime(const Section, Ident: string; Default: TDateTime): TDateTime;
  30.     function  ReadFloat(const Section, Ident: string; Default: Double): Double;
  31.     function  ReadTime(const Section, Ident: string; Default: TDateTime): TDateTime;
  32.     procedure WriteString(const Section, Ident, Value: String);
  33.     procedure WriteInteger(const Section, Ident: string; Value: Longint);
  34.     procedure WriteBool(const Section, Ident: string; Value: Boolean);
  35.     procedure WriteCurrency(const Section, Ident: string; Value: Currency);
  36.     procedure WriteBinaryData(const Section, Ident: string; var Buffer; BufSize: Integer);
  37.     procedure WriteDate(const Section, Ident: string; Value: TDateTime);
  38.     procedure WriteDateTime(const Section, Ident: string; Value: TDateTime);
  39.     procedure WriteFloat(const Section, Ident: string; Value: Double);
  40.     procedure WriteTime(const Section, Ident: string; Value: TDateTime);
  41.     procedure ReadSection(const Section: string; Strings: TStrings);
  42.     procedure ReadSections(Strings: TStrings);
  43.     procedure ReadSectionValues(const Section: string; Strings: TStrings);
  44.     procedure EraseSection(const Section: string);
  45.     procedure DeleteKey(const Section, Ident: String);
  46.     property  FileName: string read FFileName;
  47.     function  SaveAppKey(key, filename : string): boolean;
  48.   end;
  49. implementation
  50. constructor TWinRegistry.Create(const FileName: string);
  51. begin
  52.   inherited Create;
  53.   FFileName := FileName;
  54.   OpenKey(FileName, True);
  55. end;
  56. constructor TWinRegistry.CreateWithKey;
  57. begin
  58.   inherited Create;
  59.   FFileName := FileName;
  60.   RootKey := key;
  61.   OpenKey(FileName, True);
  62. end;
  63. function TWinRegistry.ReadString(const Section, Ident, Default: string): string;
  64. var
  65.   Key, OldKey: HKEY;
  66. begin
  67.   Key := GetKey(Section);
  68.   if Key <> 0 then
  69.   try
  70.     OldKey := CurrentKey;
  71.     SetCurrentKey(Key);
  72.     try
  73.       if ValueExists(Ident) then
  74.         Result := inherited ReadString(Ident) else
  75.         Result := Default;
  76.     finally
  77.       SetCurrentKey(OldKey);
  78.     end;
  79.   finally
  80.     RegCloseKey(Key);
  81.   end
  82.   else Result := Default;
  83. end;
  84. procedure TWinRegistry.WriteString(const Section, Ident, Value: String);
  85. var
  86.   Key, OldKey: HKEY;
  87. begin
  88.   CreateKey(Section);
  89.   Key := GetKey(Section);
  90.   if Key <> 0 then
  91.   try
  92.     OldKey := CurrentKey;
  93.     SetCurrentKey(Key);
  94.     try
  95.       inherited WriteString(Ident, Value);
  96.     finally
  97.       SetCurrentKey(OldKey);
  98.     end;
  99.   finally
  100.     RegCloseKey(Key);
  101.   end;
  102. end;
  103. function TWinRegistry.ReadInteger(const Section, Ident: string; Default: LongInt): LongInt;
  104. var
  105.   Key, OldKey: HKEY;
  106. begin
  107.   Key := GetKey(Section);
  108.   if Key <> 0 then
  109.   try
  110.     OldKey := CurrentKey;
  111.     SetCurrentKey(Key);
  112.     try
  113.       if ValueExists(Ident) then
  114.         Result := inherited ReadInteger(Ident) else
  115.         Result := Default;
  116.     finally
  117.       SetCurrentKey(OldKey);
  118.     end;
  119.   finally
  120.     RegCloseKey(Key);
  121.   end
  122.   else Result := Default;
  123. end;
  124. procedure TWinRegistry.WriteInteger(const Section, Ident: string; Value: LongInt);
  125. var
  126.   Key, OldKey: HKEY;
  127. begin
  128.   CreateKey(Section);
  129.   Key := GetKey(Section);
  130.   if Key <> 0 then
  131.   try
  132.     OldKey := CurrentKey;
  133.     SetCurrentKey(Key);
  134.     try
  135.       inherited WriteInteger(Ident, Value);
  136.     finally
  137.       SetCurrentKey(OldKey);
  138.     end;
  139.   finally
  140.     RegCloseKey(Key);
  141.   end;
  142. end;
  143. function TWinRegistry.ReadBool(const Section, Ident: string; Default: Boolean): Boolean;
  144. var
  145.   Key, OldKey: HKEY;
  146. begin
  147.   Key := GetKey(Section);
  148.   if Key <> 0 then
  149.   try
  150.     OldKey := CurrentKey;
  151.     SetCurrentKey(Key);
  152.     try
  153.       if ValueExists(Ident) then
  154.         Result := inherited ReadBool(Ident) else
  155.         Result := Default;
  156.     finally
  157.       SetCurrentKey(OldKey);
  158.     end;
  159.   finally
  160.     RegCloseKey(Key);
  161.   end
  162.   else Result := Default;
  163. end;
  164. procedure TWinRegistry.WriteBool(const Section, Ident: string; Value: Boolean);
  165. const
  166.   Values: array[Boolean] of string = ('0', '1');
  167. var
  168.   Key, OldKey: HKEY;
  169. begin
  170.   CreateKey(Section);
  171.   Key := GetKey(Section);
  172.   if Key <> 0 then
  173.   try
  174.     OldKey := CurrentKey;
  175.     SetCurrentKey(Key);
  176.     try
  177.       inherited WriteBool(Ident, Value);
  178.     finally
  179.       SetCurrentKey(OldKey);
  180.     end;
  181.   finally
  182.     RegCloseKey(Key);
  183.   end;
  184. end;
  185. function TWinRegistry.ReadCurrency(const Section, Ident: string; Default: Currency): Currency;
  186. var
  187.   Key, OldKey: HKEY;
  188. begin
  189.   Key := GetKey(Section);
  190.   if Key <> 0 then
  191.   try
  192.     OldKey := CurrentKey;
  193.     SetCurrentKey(Key);
  194.     try
  195.       if ValueExists(Ident) then
  196.         Result := inherited ReadCurrency(Ident) else
  197.         Result := Default;
  198.     finally
  199.       SetCurrentKey(OldKey);
  200.     end;
  201.   finally
  202.     RegCloseKey(Key);
  203.   end
  204.   else Result := Default;
  205. end;
  206. function TWinRegistry.ReadBinaryData(const Section, Ident: string; var Buffer; BufSize: Integer): Integer;
  207. var
  208.   Key, OldKey: HKEY;
  209. begin
  210.   Key := GetKey(Section);
  211.   if Key <> 0 then
  212.   try
  213.     OldKey := CurrentKey;
  214.     SetCurrentKey(Key);
  215.     try
  216.       if ValueExists(Ident) then
  217.         Result := inherited ReadBinaryData(Ident, Buffer, BufSize) else
  218.         Result := 0;
  219.     finally
  220.       SetCurrentKey(OldKey);
  221.     end;
  222.   finally
  223.     RegCloseKey(Key);
  224.   end
  225.   else Result := 0;
  226. end;
  227. function TWinRegistry.ReadDate(const Section, Ident: string; Default: TDateTime): TDateTime;
  228. var
  229.   Key, OldKey: HKEY;
  230. begin
  231.   Key := GetKey(Section);
  232.   if Key <> 0 then
  233.   try
  234.     OldKey := CurrentKey;
  235.     SetCurrentKey(Key);
  236.     try
  237.       if ValueExists(Ident) then
  238.         Result := inherited ReadDate(Ident) else
  239.         Result := Default;
  240.     finally
  241.       SetCurrentKey(OldKey);
  242.     end;
  243.   finally
  244.     RegCloseKey(Key);
  245.   end
  246.   else Result := Default;
  247. end;
  248. function TWinRegistry.ReadDateTime(const Section, Ident: string; Default: TDateTime): TDateTime;
  249. var
  250.   Key, OldKey: HKEY;
  251. begin
  252.   Key := GetKey(Section);
  253.   if Key <> 0 then
  254.   try
  255.     OldKey := CurrentKey;
  256.     SetCurrentKey(Key);
  257.     try
  258.       if ValueExists(Ident) then
  259.         Result := inherited ReadDateTime(Ident) else
  260.         Result := Default;
  261.     finally
  262.       SetCurrentKey(OldKey);
  263.     end;
  264.   finally
  265.     RegCloseKey(Key);
  266.   end
  267.   else Result := Default;
  268. end;
  269. function TWinRegistry.ReadFloat(const Section, Ident: string; Default: Double): Double;
  270. var
  271.   Key, OldKey: HKEY;
  272. begin
  273.   Key := GetKey(Section);
  274.   if Key <> 0 then
  275.   try
  276.     OldKey := CurrentKey;
  277.     SetCurrentKey(Key);
  278.     try
  279.       if ValueExists(Ident) then
  280.         Result := inherited ReadFloat(Ident) else
  281.         Result := Default;
  282.     finally
  283.       SetCurrentKey(OldKey);
  284.     end;
  285.   finally
  286.     RegCloseKey(Key);
  287.   end
  288.   else Result := Default;
  289. end;
  290. function TWinRegistry.ReadTime(const Section, Ident: string; Default: TDateTime): TDateTime;
  291. var
  292.   Key, OldKey: HKEY;
  293. begin
  294.   Key := GetKey(Section);
  295.   if Key <> 0 then
  296.   try
  297.     OldKey := CurrentKey;
  298.     SetCurrentKey(Key);
  299.     try
  300.       if ValueExists(Ident) then
  301.         Result := inherited ReadDateTime(Ident) else
  302.         Result := Default;
  303.     finally
  304.       SetCurrentKey(OldKey);
  305.     end;
  306.   finally
  307.     RegCloseKey(Key);
  308.   end
  309.   else Result := Default;
  310. end;
  311. procedure TWinRegistry.WriteCurrency(const Section, Ident: string; Value: Currency);
  312. var
  313.   Key, OldKey: HKEY;
  314. begin
  315.   CreateKey(Section);
  316.   Key := GetKey(Section);
  317.   if Key <> 0 then
  318.   try
  319.     OldKey := CurrentKey;
  320.     SetCurrentKey(Key);
  321.     try
  322.       inherited WriteCurrency(Ident, Value);
  323.     finally
  324.       SetCurrentKey(OldKey);
  325.     end;
  326.   finally
  327.     RegCloseKey(Key);
  328.   end;
  329. end;
  330. procedure TWinRegistry.WriteBinaryData(const Section, Ident: string; var Buffer; BufSize: Integer);
  331. var
  332.   Key, OldKey: HKEY;
  333. begin
  334.   CreateKey(Section);
  335.   Key := GetKey(Section);
  336.   if Key <> 0 then
  337.   try
  338.     OldKey := CurrentKey;
  339.     SetCurrentKey(Key);
  340.     try
  341.       inherited WriteBinaryData(Ident, Buffer, BufSize);
  342.     finally
  343.       SetCurrentKey(OldKey);
  344.     end;
  345.   finally
  346.     RegCloseKey(Key);
  347.   end;
  348. end;
  349. procedure TWinRegistry.WriteDate(const Section, Ident: string; Value: TDateTime);
  350. var
  351.   Key, OldKey: HKEY;
  352. begin
  353.   CreateKey(Section);
  354.   Key := GetKey(Section);
  355.   if Key <> 0 then
  356.   try
  357.     OldKey := CurrentKey;
  358.     SetCurrentKey(Key);
  359.     try
  360.       inherited WriteDate(Ident, Value);
  361.     finally
  362.       SetCurrentKey(OldKey);
  363.     end;
  364.   finally
  365.     RegCloseKey(Key);
  366.   end;
  367. end;
  368. procedure TWinRegistry.WriteDateTime(const Section, Ident: string; Value: TDateTime);
  369. var
  370.   Key, OldKey: HKEY;
  371. begin
  372.   CreateKey(Section);
  373.   Key := GetKey(Section);
  374.   if Key <> 0 then
  375.   try
  376.     OldKey := CurrentKey;
  377.     SetCurrentKey(Key);
  378.     try
  379.       inherited WriteDateTime(Ident, Value);
  380.     finally
  381.       SetCurrentKey(OldKey);
  382.     end;
  383.   finally
  384.     RegCloseKey(Key);
  385.   end;
  386. end;
  387. procedure TWinRegistry.WriteFloat(const Section, Ident: string; Value: Double);
  388. var
  389.   Key, OldKey: HKEY;
  390. begin
  391.   CreateKey(Section);
  392.   Key := GetKey(Section);
  393.   if Key <> 0 then
  394.   try
  395.     OldKey := CurrentKey;
  396.     SetCurrentKey(Key);
  397.     try
  398.       inherited WriteFloat(Ident, Value);
  399.     finally
  400.       SetCurrentKey(OldKey);
  401.     end;
  402.   finally
  403.     RegCloseKey(Key);
  404.   end;
  405. end;
  406. procedure TWinRegistry.WriteTime(const Section, Ident: string; Value: TDateTime);
  407. var
  408.   Key, OldKey: HKEY;
  409. begin
  410.   CreateKey(Section);
  411.   Key := GetKey(Section);
  412.   if Key <> 0 then
  413.   try
  414.     OldKey := CurrentKey;
  415.     SetCurrentKey(Key);
  416.     try
  417.       inherited WriteTime(Ident, Value);
  418.     finally
  419.       SetCurrentKey(OldKey);
  420.     end;
  421.   finally
  422.     RegCloseKey(Key);
  423.   end;
  424. end;
  425. procedure TWinRegistry.ReadSection(const Section: string; Strings: TStrings);
  426. var
  427.   Key, OldKey: HKEY;
  428. begin
  429.   Key := GetKey(Section);
  430.   if Key <> 0 then
  431.   try
  432.     OldKey := CurrentKey;
  433.     SetCurrentKey(Key);
  434.     try
  435.       inherited GetValueNames(Strings);
  436.     finally
  437.       SetCurrentKey(OldKey);
  438.     end;
  439.   finally
  440.     RegCloseKey(Key);
  441.   end;
  442. end;
  443. procedure TWinRegistry.ReadSections(Strings: TStrings);
  444. begin
  445.   GetKeyNames(Strings);
  446. end;
  447. procedure TWinRegistry.ReadSectionValues(const Section: string; Strings: TStrings);
  448. var
  449.   KeyList: TStringList;
  450.   I: Integer;
  451. begin
  452.   KeyList := TStringList.Create;
  453.   try
  454.     ReadSection(Section, KeyList);
  455.     Strings.BeginUpdate;
  456.     try
  457.       for I := 0 to KeyList.Count - 1 do
  458.         Strings.Values[KeyList[I]] := ReadString(Section, KeyList[I], '');
  459.     finally
  460.       Strings.EndUpdate;
  461.     end;
  462.   finally
  463.     KeyList.Free;
  464.   end;
  465. end;
  466. procedure TWinRegistry.EraseSection(const Section: string);
  467. begin
  468.   inherited DeleteKey(Section);
  469. end;
  470. procedure TWinRegistry.DeleteKey(const Section, Ident: String);
  471. begin
  472.   inherited DeleteValue(Ident);
  473. end;
  474. function TWinRegistry.SaveAppKey;
  475. var
  476.   OldKey: HKEY;
  477.   sKey  : HKEY;
  478.   temp  : integer;
  479. begin
  480.   result := false;
  481.   sKey := GetKey(Key + '');
  482.   if sKey <> 0 then
  483.   try
  484.     OldKey := CurrentKey;
  485.     SetCurrentKey(sKey);
  486.     try
  487.       temp := RegSaveKey(sKey, PChar(fileName), nil);
  488.       result := temp = ERROR_SUCCESS;
  489.     finally
  490.       SetCurrentKey(OldKey);
  491.     end;
  492.   finally
  493.     RegCloseKey(skey);
  494.   end;
  495. end;
  496. end.