請問字串如何轉換成 Registry Key ? |
答題得分者是:Miles
|
pcboy
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
Miles
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
可以寫個程式下去轉換, 這裡有一個範例
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 發送簡訊給我 |
|
Chance36
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
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 發送簡訊給我 |
實際測試, {$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 發送簡訊給我 |
根據大家提供的資訊, 土法煉鋼
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
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |