CLSID clsid;
HRESULT hr =
CLSIDFromProgID(L"ShockwaveFlash.ShockwaveFlash", &clsid);
以上代码用来检测Flash是否安装,CLSIDFromProgID通过注册表来查询CLSID的值。不知何故有时注表内注册项不完整(在XP,2003中都有出现),查询得知HKEY_CLASSES_ROOT/ShockwaveFlash.ShockwaveFlash健值不存在会导致调用此API为失败并返回REGDB_E_WRITEREGDB。变通的方法可以通过CLSID检测ProgID来检查Flash是否安装,由于Flash的各版本CLSID一致,所以可以如下这么写
LPOLESTR pProgID
;
if(FAILED(ProgIDFromCLSID(CLSID_ShockwaveFlash,&pProgID))){
//T("cannot
convert CLSID_ShockwaveFlash to CLSID"));
return FALSE;
}
else
{
CoTaskMemFree(pProgID);
return TRUE;
}