描述:
我用win32写了一个DLL ,想取出word的版本号,不知道怎么取
望各位大侠告知!
解决方案1:
用注册表:
char wpath[200];
unsigned long ws;
unsigned long tp=NULL;
HKEY hk;
wpath[0]=0;
if (RegOpenKey(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Office\\8.0\\Common",
&hk)== ERROR_SUCCESS)
{
ws=200;
if (RegQueryValueEx(hk,
"InstallRoot",NULL,&tp,wpath,&ws)== ERROR_SUCCESS)
{
// office 97 find!
}
}
if (RegOpenKey(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Office\\9.0\\Word\\InstallRoot",
&hk) == ERROR_SUCCESS)
{
ws=200;
if (RegQueryValueEx(hk,
"Path",NULL,&tp,wpath,&ws)== ERROR_SUCCESS)
{
//office 2000 find!
}
}
if (RegOpenKey(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Office\\10.0\\Word\\InstallRoot\\",
&hk) == ERROR_SUCCESS)
{
ws=200;
if (RegQueryValueEx(hk,
"Path",NULL,&tp,wpath,&ws)== ERROR_SUCCESS)
{
//office XP find!
ShowMessage("ok");
}
}
if(wpath[0])
strcat(wpath,"winword.exe");
//wpath中为winword.exe的全路径
///用BCB6.0通过
#include <windows.h>
#include <stdio.h>
char *f="E:\\Program Files\\Microsoft Office\\Office\\winword.exe";
void main()
{
unsigned long hd=0;
VS_FIXEDFILEINFO *vs;
unsigned int m;
char *lpData;
m= GetFileVersionInfoSize(f,&hd);
lpData=new char[m];
GetFileVersionInfo(
f,
0, // ignored
m, // size of buffer
lpData // pointer to buffer to receive file-version info.
);
VerQueryValue(lpData,"\\",(void **)&vs,&m);
printf("version is :%ld.%ld.%ld.%ld",vs->dwFileVersionMS >> 16,vs->dwFileVersionMS & 0xffff,
vs->dwFileVersionLS>>16,vs->dwFileVersionLS & 0xffff);
delete lpData;
}