Hej! Skulle jag oxå gärna vilja veta. Skulle var grymt underbart. ;o) Det enda sättet att göra detta och med säkerhet få rätt resultat skulle vara att skapa en instans av varenda COM klass registrerad och fråga om det stödjer interfaces i fråga. Att göra detta dynamiskt skulle alltså vara väldigt tidsödande och minneskrävande. Jag får väl hålla koll på dem för hand i sånt fall :) Det här är ett problem som Microsoft själva har försökt lösa genom att hitta på något som kallas Component Categories. Först genom att man kunde associera ett kategorinamn med en komponent (under HKEY_CLASSES_ROOT\CLSID\{klassens_GUID} och senare, när det blev en djungel av kategorinamn, genom att lista kategorinamn under unika GUIDar under HKEY_CLASSES_ROOT\Component Categories\ och låta komponenterna lista en eller flera av dessa kategori-GUIDar under Implemented Categories i sin registrynyckel. Jag ser att du markerat inlägget som löst, men skriver en liten kommentar iallafall:Lista registrerade komponenter som stödjer ett visst interface
Är det någon som vet hur man kan få fram en lista på alla installerade komponenter som stödjer ett visst interface?
Antingen ett som jag skrivit själv eller något annat interface.
/AndersSv: Lista registrerade komponenter som stödjer ett visst interface
Sv: Lista registrerade komponenter som stödjer ett visst interface
Ett annat sätt är att hitta alla registrerade typelibs och kolla i dess typinformation. Men det finns ingen garanti att den är komplett eller att det ens finns ett typelib för en klass.
MSSv: Lista registrerade komponenter som stödjer ett visst interface
Sv: Lista registrerade komponenter som stödjer ett visst interface
Tyvärr kan man inte lita på att dessa kategorier stämmer. Det finns inte något krav på att en registrerad komponent anger korrekt och fullständig (vad nu det är, nya kategorier kan tillkomma när som helst) kategoriinformation.
Om det dock är så att det är ett eget interface det handlar om, och du själv har makt över hur alla komponenter registrerar sig, DÅ kan jag rekommendera att du utnyttjar kategorierna. Läs mer här: msdn.microsoft.com/library/default.asp?url=/library/en-us/com/htm/comp_cat_7diq.asp
I annat fall är det svårt. Du kan ju förstås gå igenom alla registrerade klasser i registryt, söka upp deras motsvarande dll och sedan parsa den (finns verktyg för detta på nätet) och se om den har det sökta interfacet.... Låter som en låååååång progressindikator kommer att behövas... :-)Sv: Lista registrerade komponenter som stödjer ett visst interface
Det här är ett problem som Microsoft själva har försökt lösa genom att hitta på något som kallas Component Categories. Först genom att man kunde associera ett kategorinamn med en komponent (under HKEY_CLASSES_ROOT\CLSID\{klassens_GUID} och senare, när det blev en djungel av kategorinamn, genom att lista kategorinamn under unika GUIDar under HKEY_CLASSES_ROOT\Component Categories\ och låta komponenterna lista en eller flera av dessa kategori-GUIDar under Implemented Categories i sin registrynyckel.
Tyvärr kan man inte lita på att dessa kategorier stämmer. Det finns inte något krav på att en registrerad komponent anger korrekt och fullständig (vad nu det är, nya kategorier kan tillkomma när som helst) kategoriinformation.
Om det dock är så att det är ett eget interface det handlar om, och du själv har makt över hur alla komponenter registrerar sig, DÅ kan jag rekommendera att du utnyttjar kategorierna. Läs mer här: msdn.microsoft.com/library/default.asp?url=/library/en-us/com/htm/comp_cat_7diq.asp
I annat fall är det svårt. Du kan ju förstås gå igenom alla registrerade klasser i registryt, söka upp deras motsvarande dll och sedan parsa den (finns verktyg för detta på nätet) och se om den har det sökta interfacet.... Låter som en låååååång progressindikator kommer att behövas... :-)