如何在LongWord和string类型之间转换(30分)

  • 主题发起人 主题发起人 units
  • 开始时间 开始时间
U

units

Unregistered / Unconfirmed
GUEST, unregistred user!
Tregistry的RootKey好像是longword类型,我有这样一个字符串 'HKEY_CLASSES_ROOT'
如何把这个字符串的值赋给RootKey呢?(因为程序原因,我这里不能直接赋值)
 
RootKey := HKEY_CLASSES_ROOT
HKEY_CLASSES_ROOT是一个常量
 
to 特尔斐:

那么有没有办法把我的字符串类型变成常量名呢? 因为由于一些原因,我不能
直接RootKey := HKEY_CLASSES_ROOT这样赋值,请教
 
在Windows单元都已经订义好了
如下:
{$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);
 
完了,是不是这样就没有办法把一串字符串转换成常量名阿
 
很简单,建立一个字符串-常量的对照表即可 :)
var
ConstList:TStringList=nil;
procedure InitConstList;
//初始化对照表
begin
ConstList:=TStringList.Create;
ConstList.AddObject('HKEY_CLASSES_ROOT',TObject(HKEY_CLASSES_ROOT));
ConstList.AddObject('HKEY_CURRENT_USER',TObject(HKEY_CURRENT_USER));
ConstList.AddObject('HKEY_LOCAL_MACHINE',TObject(HKEY_LOCAL_MACHINE));
ConstList.AddObject('HKEY_USERS',TObject(HKEY_USERS));
ConstList.AddObject('HKEY_PERFORMANCE_DATA',TObject(HKEY_PERFORMANCE_DATA));
//...
end;

function GetValueByStr(const NameStr:String):DWord;
var
n:Integer;
begin
if ConstList=nil then
InitConstList;
n:=ConstList.IndexOf(NameStr);
if n>=0 then
Result:=DWord(ConstList.Objects[n])
else
Result:=0;
//如果失败,返回0 ——当然,你也可以定义为其它值 :)
end;

eg:
Root:=GetValueByStr('HKEY_CLASSES_ROOT');
 
谢谢creation-zy斑竹!谢谢诸位的帮助!!!
 
后退
顶部