一个简单的问题,拿分的好机会。

liguang 2000-07-16 12:58:00
很简单的问题,在注册表中读出FOXMAIL应用程序的路径(在
HKEY_LOCAL_MACHINE\Software\Aerofox\FoxMail键下的E
xecutable键值下)。要求:不要使用DELPHI封装的TRegist
ry类,而是使用Windows API中操作注册表的API来完成。见
到源码即给分。
...全文
130 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
JGTM2000 2000-07-16
  • 打赏
  • 举报
回复
用Shell Lightweight Utilities API可以非常简单的完成这个工作。
如果你没有shlwapi的声明单元,则简单的声明如下函数入口:
function SHGetValue(
hKey: HKEY;
subKeyName, valueName: PChar;
valueType: PDWORD;
dataBuf: Pointer;
bufSize: PDWORD
):DWORD; stdcall; external 'shlwapi.dll' name 'SHGetValueA';
随后只需要调用该函数就可以得到你所需要的路径值:
function GetAppPath: string;
const
REGROOT: HKEY = HKEY_LOCAL_MACHINE;
REGKEYNAME = 'Software\Aerofox\FoxMail';
REGVALUENAME = 'Executable';
var
valueType: DWORD;
cbSize: DWORD;
begin
valueType:=REG_SZ;
SetLength(Result,MAX_PATH);
cbSize:=Length(Result);
if SHGetValueA(
REGROOT, REGKEYNAME, REGVALUENAME,
@valueType, PChar(Result), @cbSize) = ERROR_SUCCESS then
begin
SetLength(Result,Length(PChar(Result)));
end else
begin
SetLength(Result,0);
raise Exception.Create('Path not found in registry.');
end;
end;
需要注意的是,如果你需要频繁的或者大量的访问注册表中的多个键值,最好用advapi中的相关函数,当然用Delphi自己的TRegistry类就更是简单高效了。
IAmKylix 2000-07-16
  • 打赏
  • 举报
回复
对NetAnts测试通过,如果你运行失败,请检查键名是否正确。(Uses ShellApi)
procedure TForm1.Button1Click(Sender: TObject);
var Ret,Key:HKey;
DataType,DataLen:integer;
Buffer:string;
begin
Ret:=RegOpenKey(HKEY_LOCAL_MACHINE,'Software\Aerofox\FoxMail',Key);
if Ret=0 then
Ret:=RegQueryValueEx(Key,PChar('Executable'),nil,@DataType,nil,@DataLen)
else
ShowMessage('Error!');

case DataType of
REG_SZ,REG_EXPAND_SZ,REG_MULTI_SZ:
begin
SetString(Buffer,nil,DataLen);
RegQueryValueEx(Key,PChar('Executable'),nil,@DataType,PByte(PChar(Buffer)),@DataLen);
Edit1.Text:=Buffer;{显示键值}
end;
end;
end;
kxy 2000-07-16
  • 打赏
  • 举报
回复
>>不要使用DELPHI封装的TRegist
>>ry类,而是使用Windows API中操作注册表的API来完成.
why??
delphi中File->Open,找到delphi的安装目录,打开这个文件 source/vcl/Registry.pas,然后找到delphi替你写好的打开注册表健,和读取的方法。(delphi是使用Windows API中操作注册表的API来完成)
然后使用,ctrl+c,ctrl+v(或者你自己喜欢的方式)将代码拷贝到你的程序中,然后做一些修改适应你的程序。ok搞掂.

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧