Delphi下如何读写多字符串值(REG_MULTI_SZ类型)的键值 |
尚未結案
|
zouhw
一般會員 發表:6 回覆:13 積分:3 註冊:2004-07-12 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
參考這篇 Delphi 下如何讀寫多字符串值(REG_MULTI_SZ 類型):
http://www.china-askpro.com/msg48/qa05.shtml
或
http://groups.google.com/groups?q=REG_MULTI_SZ+%2B+delphi&hl=zh-TW&lr=&ie=UTF-8&selm=3bb7c2ff.205619204%40newsgroups.borland.com&rnum=2 --
向 KTop 的弟兄們致敬! 發表人 - hagar 於 2004/07/14 13:42:41
|
zouhw
一般會員 發表:6 回覆:13 積分:3 註冊:2004-07-12 發送簡訊給我 |
用Write_MULTI_SZ_Strings(const valueName: string; strings: TStrings);
向注册表写值时,没有反应,代码如下: procedure TForm1.Button1Click(Sender: TObject);
var
ipzhw:TStrings;
begin
ipzhw:=TStringList.Create; // ipzhw.Add('172.18.70.55'); ipzhw.Append('31 00 37 00 32 00 2E 00');
ipzhw.Append('31 00 38 00 2E 00 37 00');
ipzhw.Append('30 00 2E 00 35 00 35 00');
ipzhw.Append('00 00 00 00'); Write_MULTI_SZ_Strings('IPAddress',ipzhw);
end; 什么原因呢! < >< > 一切皆有可能!
------
dsf |
zouhw
一般會員 發表:6 回覆:13 積分:3 註冊:2004-07-12 發送簡訊給我 |
用Write_MULTI_SZ_Strings(const valueName: string; strings: TStrings);
向注册表写值时,没有反应,代码如下: procedure TForm1.Button1Click(Sender: TObject);
var
ipzhw:TStrings;
begin
ipzhw:=TStringList.Create; // ipzhw.Add('172.18.70.55'); ipzhw.Append('31 00 37 00 32 00 2E 00');
ipzhw.Append('31 00 38 00 2E 00 37 00');
ipzhw.Append('30 00 2E 00 35 00 35 00');
ipzhw.Append('00 00 00 00'); Write_MULTI_SZ_Strings('IPAddress',ipzhw);
end; 什么原因呢! 一切皆有可能!
------
dsf |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Buttons, Registry, StdCtrls; type TExRegistry = class(TRegistry) public procedure ReadStrings(const valueName: string; strings: TStrings); procedure WriteStrings(const valueName: string; strings: TStrings); end; type EExRegistryException = class(ERegistryException) private fCode: Integer; function GetError : string; public constructor CreateLastError (const st : string); constructor Create (code : DWORD; const st : string); property Code : Integer read fCode; end; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} { TExRegistry } procedure TExRegistry.ReadStrings(const valueName: string; strings: TStrings); var valueType : DWORD; valueLen : DWORD; p, buffer : PChar; begin strings.Clear; SetLastError (RegQueryValueEx (CurrentKey, PChar (valueName), Nil, @valueType, Nil, @valueLen)); if GetLastError = ERROR_SUCCESS then if valueType = REG_MULTI_SZ then begin GetMem (buffer, valueLen); try RegQueryValueEx (CurrentKey, PChar (valueName), Nil, Nil, PBYTE(buffer), @valueLen); p := buffer; while p^ <> #0 do begin strings.Add (p); Inc (p, lstrlen (p) 1) end finally FreeMem (buffer) end end else raise ERegistryException.Create ('String list expected') else raise EExRegistryException.CreateLastError('Unable read MULTI_SZ value') end; procedure TExRegistry.WriteStrings(const valueName: string; strings: TStrings); var p, buffer : PChar; i : Integer; size : DWORD; begin size := 0; for i := 0 to strings.Count - 1 do Inc (size, Length (strings [i]) 1); Inc (size); GetMem (buffer, size); try p := buffer; for i := 0 to strings.count - 1 do begin lstrcpy (p, PChar (strings [i])); Inc (p, lstrlen (p) 1) end; p^ := #0; SetLastError (RegSetValueEx (CurrentKey, PChar (valueName), 0, REG_MULTI_SZ, buffer, size)); if GetLastError <> ERROR_SUCCESS then raise EExRegistryException.CreateLastError('Unable to write MULTI_SZ value'); finally FreeMem (buffer) end end; { EExRegistryException } constructor EExRegistryException.Create(code: DWORD; const st: string); begin fCode := code; inherited Create (GetError ':' st); end; constructor EExRegistryException.CreateLastError(const st: string); begin fCode := GetLastError; inherited Create (GetError ':' st); end; function EExRegistryException.GetError: string; var msg : string; function GetErrorMessage (code : Integer) : string; var hErrLib : THandle; msg : PChar; flags : Integer; function MAKELANGID (p, s : word) : Integer; begin result := (s shl 10) or p end; begin hErrLib := LoadLibraryEx ('netmsg.dll', 0, LOAD_LIBRARY_AS_DATAFILE); try flags := FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_IGNORE_INSERTS or FORMAT_MESSAGE_FROM_SYSTEM; if hErrLib <> 0 then flags := flags or FORMAT_MESSAGE_FROM_HMODULE; if FormatMessage (flags, pointer (hErrLib), code, MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), PChar (@msg), 0, Nil) <> 0 then try result := msg; finally LocalFree (Integer (msg)); end finally if hErrLib <> 0 then FreeLibrary (hErrLib) end end; begin msg := GetErrorMessage (fCode); if msg = '' then result := Format ('Error %d', [fCode]) else result := Format ('Error %d : %s', [fCode, msg]) end; // 讀的部份 procedure TForm1.Button1Click(Sender: TObject); var reg: TExRegistry; begin reg := TExRegistry.Create; try reg.RootKey := HKEY_LOCAL_MACHINE; if reg.OpenKey('SOFTWARE\Microsoft\Active Setup\InstallInfo', False) then reg.ReadStrings('InstalledComponents', Memo1.Lines); finally reg.Free; end; end; // 寫的部份 procedure TForm1.Button2Click(Sender: TObject); var reg: TExRegistry; begin reg := TExRegistry.Create; try reg.RootKey := HKEY_LOCAL_MACHINE; if reg.OpenKey('SOFTWARE\Microsoft\Active Setup\InstallInfo', False) then reg.WriteStrings('Test', Memo1.Lines); finally reg.Free; end; end; end.-- 向 KTop 的弟兄們致敬! 發表人 - hagar 於 2004/07/21 14:11:46 |
zouhw
一般會員 發表:6 回覆:13 積分:3 註冊:2004-07-12 發送簡訊給我 |
|
Ktop_Robot
站務副站長 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |