Проблема с (многими, многими) предложениями по сканированию реестра заключается в следующем:
- есть несколько мест в реестре, которые вам нужно посмотреть
- класс может быть зарегистрирован и не существует в реестре
COM без регистрации позволяет регистрировать класс без его регистрации. Концептуально вы не хотите знать, является ли класс «зарегистрированным» , вы просто хотите знать, что он зарегистрирован достаточно для создания.
К сожалению, единственный (и лучший) способ сделать это - создать его:
//Code released into public domain. No attribution required.
function IsClassRegistered(const ClassID: TGUID): Boolean;
var
unk: IUnknown;
hr: HRESULT;
begin
hr := CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IUnknown, {out}unk);
unk := nil;
Result := (hr <> REGDB_E_CLASSNOTREG);
end;