全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1181
推到 Plurk!
推到 Facebook!

請問字串如何轉換成 Registry Key ?

答題得分者是:Miles
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-08 17:40:48 IP:210.69.xxx.xxx 未訂閱
請問字串如何轉換成 Registry Key ? Str1 := 'HKEY_LOCAL_MACHINE'; Registry.Root = 'HKEY_LOCAL_MACHINE'; 和 Registry.Root = HKEY(Str1); 結果不同
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-08 20:30:20 IP:220.135.xxx.xxx 未訂閱
可以寫個程式下去轉換, 這裡有一個範例 http://www.swissdelphicenter.ch/en/showcode.php?id=2118 轉貼
const 
  HKEYNames: array[0..6] of string = 
    ('HKEY_CLASSES_ROOT', 'HKEY_CURRENT_USER', 'HKEY_LOCAL_MACHINE', 
     'HKEY_USERS', 'HKEY_PERFORMANCE_DATA', 'HKEY_CURRENT_CONFIG', 
     'HKEY_DYN_DATA');     function HKEYToStr(const Key: HKEY): string; 
begin 
  if (key < HKEY_CLASSES_ROOT) or (key > HKEY_CLASSES_ROOT 6) then 
    Result := '' 
  else 
    Result := HKEYNames[key - HKEY_CLASSES_ROOT]; 
end;     function StrToHKEY(const KEY: string): HKEY; 
var 
  i: Byte; 
begin 
  Result := $0; 
  for i := Low(HKEYNames) to High(HKEYNames) do 
  begin 
    if SameText(HKEYNames[i], KEY) then 
      Result := HKEY_CLASSES_ROOT   i; 
  end; 
end; 
我不是高手, 高手是正在銀幕前微笑的人. 發表人 - miles 於 2004/09/08 20:31:56
------


我不是高手, 高手是正在銀幕前微笑的人.
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-14 00:57:02 IP:203.204.xxx.xxx 未訂閱
發現瑕疵, 無法轉換 HKCU, HKLM ... 等縮寫方式的機碼
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-14 01:58:24 IP:203.204.xxx.xxx 未訂閱
pcboy2 你好  
  以下截自Windows.pas中對於HKEY_XXXXX的定義,其實它們只是個DWORD的數值而已,若須使用簡短的機碼方式,那麼只要另行定義就可以啦!    const
{ Reserved Key Handles. }      {$EXTERNALSYM HKEY_CLASSES_ROOT}
  HKEY_CLASSES_ROOT     = DWORD($80000000);
  {$EXTERNALSYM HKEY_CURRENT_USER}
  HKEY_CURRENT_USER     = DWORD($80000001);
  {$EXTERNALSYM HKEY_LOCAL_MACHINE}
  HKEY_LOCAL_MACHINE    = DWORD($80000002);
  {$EXTERNALSYM HKEY_USERS}
  HKEY_USERS            = DWORD($80000003);
  {$EXTERNALSYM HKEY_PERFORMANCE_DATA}
  HKEY_PERFORMANCE_DATA = DWORD($80000004);
  {$EXTERNALSYM HKEY_CURRENT_CONFIG}
  HKEY_CURRENT_CONFIG   = DWORD($80000005);
  {$EXTERNALSYM HKEY_DYN_DATA}
  HKEY_DYN_DATA         = DWORD($80000006);    PS:自行在某個單元檔中定義(HKey.pas)後,在有用到的地方只要uses HKey ;就
可以了。(只是這樣會比較好嗎?除了Key in的字數變少了,可讀性卻變差了)    Unit HKey    const
{ Reserved Key Handles. }      {$EXTERNALSYM HKEY_CLASSES_ROOT}
  HKCR     = DWORD($80000000);
  {$EXTERNALSYM HKEY_CURRENT_USER}
  HKCU     = DWORD($80000001);
  {$EXTERNALSYM HKEY_LOCAL_MACHINE}
  HKLM    = DWORD($80000002);
  {$EXTERNALSYM HKEY_USERS}
  HKUR    = DWORD($80000003);
  {$EXTERNALSYM HKEY_PERFORMANCE_DATA}
  HKPD    = DWORD($80000004);
  {$EXTERNALSYM HKEY_CURRENT_CONFIG}
  HKCC    = DWORD($80000005);
  {$EXTERNALSYM HKEY_DYN_DATA}
  HKDD    = DWORD($80000006);
....     
_______________________________________ 深藍的魚,祝您好運..........連連
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-17 09:59:21 IP:210.69.xxx.xxx 未訂閱
實際測試, {$EXTERNALSYM HKEY_CLASSES_ROOT} 必須註解掉, 否則有錯誤     const { Reserved Key Handles. } // {$EXTERNALSYM HKEY_CLASSES_ROOT} HKCR = DWORD($80000000); // {$EXTERNALSYM HKEY_CURRENT_USER} HKCU = DWORD($80000001); // {$EXTERNALSYM HKEY_LOCAL_MACHINE} HKLM = DWORD($80000002); //{$EXTERNALSYM HKEY_USERS} HKUR = DWORD($80000003); // {$EXTERNALSYM HKEY_PERFORMANCE_DATA} HKPD = DWORD($80000004); // {$EXTERNALSYM HKEY_CURRENT_CONFIG} HKCC = DWORD($80000005); // {$EXTERNALSYM HKEY_DYN_DATA} HKDD = DWORD($80000006); implementation [Error] Unit1.pas(94): $EXTERNALSYM and $NODEFINE not allowed for 'HKEY_DYN_DATA'; only global symbols
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-17 10:02:33 IP:210.69.xxx.xxx 未訂閱
根據大家提供的資訊, 土法煉鋼     
    unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Registry;    type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.dfm}    function StrToHKEY(const KEY: string): HKEY;
begin
  Result := $0;
  if (KEY='HKEY_CLASSES_ROOT') or (KEY='HKCR') then Result:=HKEY_CLASSES_ROOT;
  if (KEY='HKEY_CURRENT_USER') or (KEY='HKCU') then Result:=HKEY_CURRENT_USER;
  if (KEY='HKEY_LOCAL_MACHINE') or (KEY='HKLM') then Result:=HKEY_LOCAL_MACHINE;
  if (KEY='HKEY_USERS') or (KEY='HKUR') then Result:=HKEY_USERS;
  if (KEY='HKEY_PERFORMANCE_DATA') or (KEY='HKPD') then Result:=HKEY_PERFORMANCE_DATA;
  if (KEY='HKEY_CURRENT_CONFIG') or (KEY='HKCC') then Result:=HKEY_CURRENT_CONFIG;
  if (KEY='HKEY_DYN_DATA') or (KEY='HKDD') then Result:=HKEY_DYN_DATA;
end;        procedure TForm1.FormCreate(Sender: TObject);
var
  a,b: HKEY;
begin
  a:=StrToHKEY('HKEY_CURRENT_USER');
  b:=StrToHKEY('HKCU');
  Memo1.Lines.Add(IntToStr(a));
  Memo1.Lines.Add(IntToStr(b));
  Memo1.Lines.Add(IntToStr(HKCU));
  Memo1.Lines.Add(IntToStr(HKEY_CURRENT_USER));
end;    end.    
發表人 - pcboy2 於 2004/09/17 10:09:05
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
系統時間:2024-06-29 16:07:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!