Mega Code Archive

 
Categories / Delphi / Activex OLE
 

COMOLE Object Name Utility Procedure

Title: COM/OLE Object Name Utility Procedure Question: This procedure enables you to browse a list of Registered GUID classes from HKEY_LOCAL_MACHINE\Software\Classes\CLSID. The object name is the name as used by the Delphi function "CreateOleObject('Outlook.Application')" etc. The procedure sets a TStrings object (eg. TListBox.Items or TMemo.Lines) to the Description of the GUID (if any), the Separator (Default is "@") and the OLE object name (eg. Outlook.Application.9). There are numerous objects in this portion of the registry, I was only interested in entries that had a "ProgID" key within. Another key of interest is "VersionIndependantProgID" which exists for certain entries. eg. Microsft Outlook has for instance .. ProgID = Outlook.Application.9 VersionIndependantProgID = Outlook.Application You may wish to return the version independant key instead of the actual key (up to you). An example of use could be .... LoadCLSID(ListBox1.Items); ListBox1.Sorted := true; The output looks something like ... ... Microsoft OLE DB Service Component Data Links@DataLinks Microsoft Organization Extension@MSExtOrganization Microsoft OrganizationUnit Extension@MSExtOrganizationUnit Microsoft Outlook@Outlook.Application.9 Microsoft Photo Editor 3.0 Photo@MSPhotoEd.3 Microsoft Photo Editor 3.0 Scan@MSPhotoEdScan.3 Microsoft Powerpoint Application@PowerPoint.Application.9 Microsoft PowerPoint Presentation@PowerPoint.Show.8 Microsoft PowerPoint Slide@PowerPoint.Slide.8 Microsoft PptNsRex Control@PptNsRex.PptNsRex.1 Microsoft PrintQueue Extension@MSExtPrintQueue Microsoft Repository Class Definition@ReposClassDef.0 etc ... ... The listing contains many interesting and unexplored possibilities. Happy Hunting. Answer: uses Registry; procedure LoadCLSID(StringList : TStrings; Separator : char = '@'); const REGKEY = 'Software\Classes\CLSID'; var WinReg : TRegistry; KeyNames,SubKeyNames : TStringList; i : integer; KeyDesc : string; begin StringList.Clear; KeyNames := TStringList.Create; SubKeyNames := TStringList.Create; WinReg := TRegistry.Create; WinReg.RootKey := HKEY_LOCAL_MACHINE; if WinReg.OpenKey(REGKEY,false) then begin WinReg.GetKeyNames(KeyNames); WinReg.CloseKey; // Traverse list of GUID numbers eg. {00000106-0000-0010-8000-00AA006D2EA4} for i := 1 to KeyNames.Count - 1 do begin // Check if key "ProgID" exists in open key ? if WinReg.OpenKey(REGKEY + '\' + KeyNames[i],false) then begin if WinReg.KeyExists('ProgID') then begin KeyDesc := WinReg.ReadString(''); // Read (Default) value WinReg.CloseKey; if WinReg.OpenKey(REGKEY + '\' + KeyNames[i] + '\ProgID',false) then begin // Add description of GUID and OLE object name to passed list StringList.Add(KeyDesc + Separator + WinReg.ReadString('')); WinReg.CloseKey; end; end else WinReg.CloseKey; end; end; end; WinReg.Free; SubKeyNames.Free; KeyNames.Free; end;