C#代码:
方式一:
引用命名空间:using Microsoft.Win32;
判断指定CLASSID 的注册表键值是否存在来判断是否存在注册类。
RegistryKey regKey = Registry.ClassesRoot.OpenSubKey("CLSID\\{00460182-9E5E-11d5-B7C8-B8269041DD57}\\");
if (regKey != null)
{
MessageBox.Show("存在指定ClassID的注册");
}
方法二:
通过包装的对象,直接建立实例,来确定对象是否注册,失败表示未注册,成功表示注册。
方法三:
通过ClassID建立对象。
public object GetActiveXObject(Guid clsid)
{
Type t = Type.GetTypeFromCLSID(clsid);
if (t == null)
return null;
return Activator.CreateInstance(t);
}
以下为网络找到的C++代码:
把下面的 CLASSID 换成你的 OCX 控件的就可以了:
BOOL CYourApp::IsInstalled()
{
HKEY hKey;
BOOL bPresent;
TCHAR szPath[_MAX_PATH];
DWORD dwRegType;
DWORD cbData = sizeof szPath * sizeof TCHAR;
hKey = NULL;
bPresent = FALSE;
::RegOpenKey(HKEY_CLASSES_ROOT, _T("CLSID\\{D27CDB6E-AE6D-11cf-96B8-444553540000}\\InprocServer32"), &hKey);
if(hKey)
{
HANDLE hfile;
szPath[0] = 0;
::RegQueryValueEx(hKey, NULL, NULL, &dwRegType, (LPBYTE)szPath, &cbData);
::RegCloseKey(hKey);
hfile = ::CreateFile(szPath, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if(INVALID_HANDLE_VALUE != hfile)
{
bPresent = TRUE;
::CloseHandle(hfile);
}
}
return bPresent;
}