您的位置:首页 > 其它

OCX 路径查找

2014-01-22 10:03 267 查看
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: