![]() |
Type-Libraries auflisten
Folgende Funktion listet alle registrierten TLBs auf dem lokalen Rechner
oder auf jedem Rechner im Netzwerk auf. Damit die Sache flexibel wird, werden die Informationen nicht einfach in eine Stringliste geschrieben, sondern wir verwenden eine Callback Methode.
Delphi-Quellcode:
Hier ein Beispiel für die Anwendung obiger Funktion:
interface
uses Classes, Windows; type TEnumTypeLibrariesCallback = procedure(guid:TGuid; const version, tlibname, filename:string; Lcid:DWORD) of object; procedure EnumTypeLibraries(callback:TEnumTypeLibrariesCallback; const UNCName:string=''); implementation uses ActiveX, ComObj, SysUtils, ComConst, registry; procedure EnumTypeLibraries2(callback:TEnumTypeLibrariesCallback; R:TRegistry); var VersionList, KeyList, LcIdList: TStringList; i, j, k, code : Integer; lcid : DWORD; key, tlibname, filename : string; guid : TGUID; begin KeyList := TStringList.Create; VersionList := TStringList.Create; LcIdList := TStringList.Create; try R.OpenKey('TypeLib', False); R.GetKeyNames(KeyList); R.CloseKey; for i := 0 to KeyList.Count-1 do begin guid := StringToGUID(KeyList[i]); key := 'TypeLib\'+KeyList[i]; R.OpenKeyReadOnly(key); VersionList.Clear; R.GetKeyNames(VersionList); R.CloseKey; for j := 0 to VersionList.Count-1 do begin R.OpenKeyReadOnly(key+'\'+ VersionList[j]); tlibname := R.ReadString(''); R.GetKeyNames(LcIdList); R.CloseKey; for k := 0 to LcIdList.Count-1 do begin Val(LcIdList[k], lcid, code); if code = 0 then begin R.OpenKeyReadOnly(key+'\'+ VersionList[j]+'\'+LcIdList[k]+'\Win32'); filename := R.ReadString(''); R.CloseKey; callback(guid, VersionList[j], tlibname, filename, lcid); end; end; end; end; finally LcIdList.Free; VersionList.Free; KeyList.Free; end; end; procedure EnumTypeLibraries(callback:TEnumTypeLibrariesCallback; const UNCName:string); var R: TRegistry; begin R := TRegistry.Create(KEY_READ); try R.RootKey := HKEY_CLASSES_ROOT; if UNCName <> '' then if not R.RegistryConnect(UNCName) then raise Exception.CreateFmt('Can''t connect to registry of %s', [UNCName]); EnumTypeLibraries2(callback, R); finally R.Free; end; end;
Delphi-Quellcode:
[edit=Matze]Code formatiert. Mfg, Matze[/edit]
procedure TFrmTest.tlibcallback(guid:TGuid; const version, tlibname, filename: string; lcid:DWORD);
begin MmoTypeLibs.Lines.Add(GUIDToString(guid)+' ('+version+') : '+tlibname+ ' :'+filename); end; procedure TFrmTest.BtnGetTypelibsClick(Sender: TObject); begin MmoTypeLibs.Clear; // alte Einträge löschen EnumTypeLibraries(tlibcallback); // TLBs auf lokalem Rechner auflisten // EnumTypeLibraries(tlibcallback, '\\Rechner17'); // TLBs auf fremdem Rechner auflisten end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz