1 StreamWriter sw = new StreamWriter(@"c:123.csv"); 2 string[] strArr = Registry.ClassesRoot.GetSubKeyNames(); 3 sw.WriteLine($"Class Name,CLSID,CurVer,TypeLibGuid,TypeLibName,TypeLibWin32Path,TypeLibWin64Path"); 4 foreach (var strKeyName in strArr) 5 { 6 var key = Registry.ClassesRoot.OpenSubKey(strKeyName, false); 7 int icount = key.GetSubKeyNames().Count(c => c == "CLSID" || c == "CurVer"); 8 if (icount == 2) 9 { 10 var CLSID = key.OpenSubKey("CLSID", false).GetValue(""); 11 string _clsid = CLSID == null ? "N.A." : CLSID.ToString(); 12 var CurVer = key.OpenSubKey("CurVer", false).GetValue(""); 13 string _curVer = CurVer == null ? "N.A." : CurVer.ToString(); 14 string _typeLibGuid = string.Empty; 15 string _typeLibName = string.Empty; 16 string _typeLibWin32Path = string.Empty; 17 string _typeLibWin64Path = string.Empty; 18 if (CLSID != null) 19 { 20 var keyTypeLib = Registry.ClassesRoot.OpenSubKey("CLSID\" + CLSID.ToString(), false); 21 if (keyTypeLib != null) 22 { 23 var typeLibGuid = keyTypeLib.OpenSubKey("TypeLib", false); 24 if (typeLibGuid != null) 25 { 26 if (typeLibGuid.GetValue("") != null) _typeLibGuid = typeLibGuid.GetValue("").ToString(); 27 { 28 var keyTypeLib1 = Registry.ClassesRoot.OpenSubKey("TypeLib\" + _typeLibGuid, false); 29 if (keyTypeLib1 != null) 30 { 31 var typeLibNameKey = keyTypeLib1.OpenSubKey(keyTypeLib1.GetSubKeyNames()[0], false); 32 if (typeLibNameKey != null) 33 { 34 var typeLibNameValue = typeLibNameKey.GetValue(""); 35 if (typeLibNameValue != null) 36 { 37 _typeLibName = typeLibNameValue.ToString(); 38 } 39 if (typeLibNameKey.SubKeyCount > 0) 40 { 41 var libPathKey = typeLibNameKey.OpenSubKey(typeLibNameKey.GetSubKeyNames()[0], false); 42 if (libPathKey != null) 43 { 44 foreach (var item in libPathKey.GetSubKeyNames()) 45 { 46 if (item == "win32") 47 { 48 var win32key = libPathKey.OpenSubKey("Win32", false); 49 if (win32key != null) 50 { 51 var win32Value = win32key.GetValue(""); 52 if (win32Value != null) _typeLibWin32Path = win32Value.ToString(); 53 } 54 } 55 if (item == "win64") 56 { 57 var win64key = libPathKey.OpenSubKey("Win64", false); 58 if (win64key != null) 59 { 60 var win64Value = win64key.GetValue(""); 61 if (win64Value != null) _typeLibWin64Path = win64Value.ToString(); 62 } 63 } 64 } 65 } 66 } 67 } 68 } 69 } 70 } 71 } 72 } 73 sw.WriteLine($"{Path.GetFileName(key.Name)},{_clsid},{_curVer},{_typeLibGuid},{_typeLibName},{_typeLibWin32Path},{_typeLibWin64Path}"); 74 } 75 } 76 sw.Close(); 77 Console.WriteLine("ok"); 78 Console.ReadKey();
不是很完整,有些程序不按照常规思路出牌,注册表到处放。。。。。。。
这写classname可用于vb或者c#创建对象,实现后绑定编程操作
.net方式调用
vba/vb方式调用