如何在Visual C++中查找OCX文件(例如flash.ocx)是否已註冊?如何在Visual C++中查找OCX文件(例如flash.ocx)是否已註冊?
5
A
回答
1
如果從.ocx文件本身的意思是,你可能有兩個選擇:
閱讀從.OCX類型庫,解析出對象和接口的UUID,看看他們都存在於註冊表下的HKCR \ CLSID,HKCR \ TypeLib等。
循環遍歷註冊表中HKCR \ CLSID中的所有註冊對象,並查看它們中是否有任何引用.ocx作爲它們的InprocServer32引用。您可能需要在讀取的路徑上執行路徑和環境變量擴展,以便測試匹配。
第一種方法也不一定會告訴你,如果它是安裝在同一版本的.OCX,雖然(儘管你可以檢查每個磁盤上的路徑)。第二個不幸的是會很慢。
這可能是最簡單的重新註冊.ocx我想。
1
您可以檢查ocx的clsid是否在HKEY_CLASSES_ROOT下。 這是我用來檢測運行時檢查指定的ocx是否已註冊的簡單代碼。
#include<windows.h>
...
//Check if an ocx is resisted, and push warning
HKEY subKey = NULL;
LONG ret = RegOpenKeyEx(HKEY_CLASSES_ROOT, _T("CLSID\\{XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX}"), NULL, KEY_QUERY_VALUE|KEY_WOW64_32KEY, &subKey);
//Note that some CLSID of versioned ocx is under HKEY_CLASS_ROOT\TypeLib\{XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX}
if(ret != ERROR_SUCCESS)
{
TCHAR message[512];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,NULL,ret,0,message,512,NULL);
CString msgStr = message;
#ifdef DEBUG //Extra message on DEBUG mode
AfxMessageBox(msgStr.GetBuffer());
#endif
AfxMessageBox(_T("OCX not registered"), MB_OK);
}
else
{
AfxMessageBox(_T("OCX is registered"), MB_OK);
RegCloseKey(subKey); //Remember to close opened key handle.
}
相關問題
- 1. 如何在vb6中註冊.ocx文件?
- 2. 註冊OCX文件
- 3. 如何檢查tlb文件是否使用C++在註冊表中註冊?
- 4. 遠程註冊ocx文件
- 5. 手動註冊OCX文件
- 6. 如何在不使用註冊ocx文件的情況下在Visual C++中使用Flash文件?
- 7. 註冊ocx文件時發生錯誤?
- 8. 如何在生成後註冊OCX
- 9. 如何在Visual Basic 98上爲Windows 8 64位註冊ActSkin4.ocx?
- 10. 尋找域名是否已經註冊?
- 11. 使用Powershell註冊.ocx文件
- 12. OCX註冊與WiX
- 13. 檢查jQuery「Fancybox」是否已經註冊?
- 14. 檢查用戶名是否已註冊
- 15. 如何確定C++ usertype是否已使用tolua註冊
- 16. IIS如何在/ bin文件夾中註冊/查找DLL?
- 17. Twitter數字:如何檢查用戶是否已經註冊
- 18. 如何檢查ActiveX DLL是否已經註冊?
- 19. 如何檢查移動設備是否已註冊
- 20. 如何查看課程ID是否已註冊?
- 21. 如何檢查.NET DLL是否已註冊?
- 22. 如何使用C#檢查註冊表值是否存在?
- 23. 如何查找是否已在android
- 24. 如何檢查註冊表文件夾是否被刪除
- 25. 如何檢查Touch ID是否已註冊但在iPhone上已禁用?
- 26. 如何查找數值是否在Visual C#中的數組#
- 27. 如何檢查文件夾中是否已存在文件
- 28. 如何檢查文件是否已被修改在c#
- 29. 如何在Windows註冊表中查找文件夾中的所有文件夾
- 30. 註冊mscomm32.ocx時出錯