我想确定实现Microsoft Web Browser Control
的DLL的版本。我需要的方法是通过DLLVERSIONINFO
函数从实现的DLL中查询DllGetVersion
;因为我认为这是最稳定的方式。但是,我不知道如何从HMODULE
对象获取Microsoft Web Browser Control
已实现的DLL。
如何获取已实现的DLL的HMODULE
?或者还有其他方法可以稳定地确定其版本?
感谢您提前。
答案 0 :(得分:2)
您可以从注册表中读取Internet Explorer COM对象的服务器(通常,它将由shdocvw.dll或更新版本中的ieframe.dll托管),并手动加载,如下所示:
TCHAR key[MAX_PATH];
// read CLSID_InternetExplorer COM Server path
SHRegGetPath(HKEY_CLASSES_ROOT, _T("CLSID\\{8856F961-340A-11D0-A96B-00C04FD705A2}\\InProcServer32"), NULL, key, 0);
HINSTANCE hInstance = LoadLibrary(PathFindFileName(key));
if (hInstance)
{
DLLGETVERSIONPROC fn = (DLLGETVERSIONPROC)GetProcAddress(hInstance, "DllGetVersion");
if (fn)
{
DLLVERSIONINFO2 version;
ZeroMemory(&version, sizeof(DLLVERSIONINFO2));
version.info1.cbSize = sizeof(DLLVERSIONINFO2);
(*fn)((DLLVERSIONINFO*)&version);
printf("Major:%u\n", version.ullVersion >> 48);
printf("Minor:%u\n", (version.ullVersion >> 32) & 0xFFFF);
printf("Build:%u\n", (version.ullVersion >> 16) & 0xFFFF);
printf("QFE:%u\n", version.ullVersion & 0xFFFF);
}
FreeLibrary(hInstance);
}