del*_*les 3 delphi registry internet-explorer
我用这个函数来获取IE版本.但在某些情况下,它无法找到此密钥并返回0.还有另一种不依赖于注册表的方法吗?
function GetIEVersion: string;
var
Reg: TRegistry;
S: string;
i : integer;
begin
Reg := TRegistry.Create;
with Reg do
begin
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('Software\Microsoft\Internet Explorer', False);
if ValueExists('Version') then
begin
S := ReadString('Version');
end
else
begin
S := '0';
CloseKey;
end;
Free;
end;
result := s;
end;
Run Code Online (Sandbox Code Playgroud)
TRegistry.OpenKey()使用该TRegistry.Access属性来了解打开密钥时请求的权限.默认情况下,TRegistry.Access设置为KEY_ALL_ACCESS,仅限于管理员.请TRegistry.OpenKeyReadOnly()改用.此外,为了更好地衡量,您可以摆脱ValueExists()检查,ReadString()如果值不存在则返回空字符串.
试试这个:
function GetIEVersion: string;
var
Reg: TRegistry;
begin
Result := '';
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKeyReadOnly('Software\Microsoft\Internet Explorer') then
try
Result := Reg.ReadString('Version');
finally
Reg.CloseKey;
end;
finally
Reg.Free;
end;
if Result = '' then
Result := '0';
end;
Run Code Online (Sandbox Code Playgroud)
您可以使用获取文件版本信息的方法.首先,我们得到iexplore.exe路径.
function GetIEPath: string;
var
Reg: TRegistry;
Len: Integer;
begin
Result := '';
Reg := TRegistry.Create;
with Reg do
begin
try
RootKey := HKEY_CLASSES_ROOT;
OpenKeyReadOnly('CLSID\{0002DF01-0000-0000-C000-000000000046}\LocalServer32');
try
Result := ReadString('');
finally
CloseKey;
Len := Length(Result);
if Len >= 2 then
begin
if(Result[Len] = '"') then
Delete(Result, Len, 1);
if(Result[1] = '"') then
Delete(Result, 1, 1);
end
else
begin
Result := '';
end;
end;
finally
Free;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
{0002DF01-0000-0000-C000-000000000046}是Internet Explorer的CLSID.LocalServer32is iexplore.exepath 的默认键值.
然后,我们使用一些API调用,如Simon Grossenbacher在此链接上所示,以获取文件版本信息.修改他的功能,我们得到这个:
function GetIEVersion: string;
var
IEPath: string;
VerInfoSize: DWORD;
VerInfo: Pointer;
VerValueSize: DWORD;
VerValue: PVSFixedFileInfo;
Dummy: DWORD;
begin
Result := '0';
IEPath := GetIEPath;
if IEPath = '' then
Exit;
VerInfoSize := GetFileVersionInfoSize(PChar(IEPath), Dummy);
if VerInfoSize = 0 then
Exit;
GetMem(VerInfo, VerInfoSize);
GetFileVersionInfo(PChar(IEPath), 0, VerInfoSize, VerInfo);
VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
with VerValue^ do
begin
Result := IntToStr(dwFileVersionMS shr 16);
Result := Result + '.' + IntToStr(dwFileVersionMS and $FFFF);
Result := Result + '.' + IntToStr(dwFileVersionLS shr 16);
Result := Result + '.' + IntToStr(dwFileVersionLS and $FFFF);
end;
FreeMem(VerInfo, VerInfoSize);
end;
Run Code Online (Sandbox Code Playgroud)
然后,你只是使用,例如,这:
ShowMessage(GetIEVersion);
Run Code Online (Sandbox Code Playgroud)