ocx在本机注册的本质,是将ocx的一些信息写到注册表指定项下,这样系统就可以根据这些配置找到ocx,并将其载入到内容中使用,路径大概是:
HKEY_CLASSES_ROOT\CLSID\{CD0A43F4-C9C5-423B-9D67-944A0E9F7460}
因此如果我们想得到已注册控件的路径,直接到指定注册表项下查找即可,如下C++方式:
LPTSTR GetOcxPathFromCLSID(LPTSTR classId,LPTSTR sPath,size_t nSize)
{
CString strPath;
HKEY hKey = 0;
CString strSubKey;
DWORD dwType = 0;
LPBYTE lpData = NULL;
DWORD cbData = 0;
strSubKey.Empty();
strSubKey.Format(_T("CLSID\\{%s}\\InprocServer32"),classId);
if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_CLASSES_ROOT,strSubKey,0,KEY_READ,&hKey))
{
RegCloseKey(hKey);
hKey = NULL;
return "";
}
dwType = REG_SZ;
lpData = new BYTE[1024];
cbData = 1024;
if(ERROR_SUCCESS != RegQueryValueEx(hKey,_T(""),NULL,&dwType,lpData,&cbData))
{
RegCloseKey(hKey);
hKey = NULL;
delete []lpData;
lpData = NULL;
return "";
}
RegCloseKey(hKey);
hKey = NULL;
lpData[cbData] = '\0';
strPath.Empty();
strPath.Format(_T("%s"),lpData);
delete[] lpData;
lpData = NULL;
if(nSize > strPath.GetLength()-1)
{
sprintf(sPath,"%s",(LPTSTR)(LPCTSTR)strPath);
}
else
return "";
return sPath;
}