<span class="kwrd">default</span>:
<span class="kwrd">break</span>;
}
}
<span class="kwrd">return</span> 0;
}
<span class="kwrd">void</span> GetFileTimeString(<span class="kwrd">char</span> *fname, CString &outStr)
{
FILETIME t;
GetFileDate(fname, &t);
FILETIME lft;
FILETIME *ft = &lft;
FileTimeToLocalFileTime(&t,ft);
<span class="rem">//outStr.Format("%08x %08x",ft->dwHighDateTime,ft->dwLowDateTime); </span>
{
SYSTEMTIME stCreate;
BOOL bret = FileTimeToSystemTime(ft,&stCreate);
outStr.Format(<span class="str">"%02d/%02d/%d %02d:%02d:%02d"</span>,
stCreate.wMonth, stCreate.wDay, stCreate.wYear,
stCreate.wHour, stCreate.wMinute, stCreate.wSecond);
}
}
<span class="kwrd">void</span> GetFileVersionString(<span class="kwrd">char</span> *fname, CString &outStr)
{
VS_FIXEDFILEINFO FileInfo;
<span class="kwrd">if</span> (SUCCEEDED(GetFileVersion(fname, &FileInfo)))
{
outStr.Format(<span class="str">"%d.%d.%d.%d"</span>, GetFileVersion(FileInfo, 3), GetFileVersion(FileInfo, 2), GetFileVersion(FileInfo, 1), GetFileVersion(FileInfo, 0));
}
<span class="kwrd">else</span>
outStr = <span class="str">"No info"</span>;
}
WORD GetFileVersion(VS_FIXEDFILEINFO FileInfo, <span class="kwrd">int</span> nIndex)
{
<span class="kwrd">if</span> (nIndex == 0)
<span class="kwrd">return</span> (WORD)(FileInfo.dwFileVersionLS & 0x0000FFFF);
<span class="kwrd">else</span> <span class="kwrd">if</span> (nIndex == 1)
<span class="kwrd">return</span> (WORD)((FileInfo.dwFileVersionLS & 0xFFFF0000) >> 16);
<span class="kwrd">else</span> <span class="kwrd">if</span> (nIndex == 2)
<span class="kwrd">return</span> (WORD)(FileInfo.dwFileVersionMS & 0x0000FFFF);
<span class="kwrd">else</span> <span class="kwrd">if</span> (nIndex == 3)
<span class="kwrd">return</span> (WORD)((FileInfo.dwFileVersionMS & 0xFFFF0000) >> 16);
<span class="kwrd">else</span>
<span class="kwrd">return</span> 0;
}
HRESULT GetFileDate (<span class="kwrd">char</span> *filename, FILETIME *pft) {
<span class="rem">// we are interested only in the create time</span>
<span class="rem">// this is the equiv of "modified time" in the </span>
<span class="rem">// Windows Explorer properties dialog</span>
FILETIME ct,lat;
HANDLE hFile = CreateFile(filename,GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
<span class="kwrd">if</span> (hFile == INVALID_HANDLE_VALUE)
<span class="kwrd">return</span> E_FAIL;<span class="rem">//LastError();</span>
BOOL bret = GetFileTime(hFile,&ct,&lat,pft);
<span class="kwrd">if</span> (bret == 0)
<span class="kwrd">return</span> E_FAIL;<span class="rem">//LastError();</span>
<span class="kwrd">return</span> S_OK;
}
<span class="rem">// This function gets the file version info structure</span>
HRESULT GetFileVersion (<span class="kwrd">char</span> *filename, VS_FIXEDFILEINFO *pvsf) {
DWORD dwHandle;
DWORD cchver = GetFileVersionInfoSize(filename,&dwHandle);
<span class="kwrd">if</span> (cchver == 0)
<span class="kwrd">return</span> E_FAIL;<span class="rem">//LastError();</span>
<span class="kwrd">char</span>* pver = <span class="kwrd">new</span> <span class="kwrd">char</span>[cchver];
BOOL bret = GetFileVersionInfo(filename,dwHandle,cchver,pver);
<span class="kwrd">if</span> (!bret)
<span class="kwrd">return</span> E_FAIL;<span class="rem">//LastError();</span>
UINT uLen;
<span class="kwrd">void</span> *pbuf;
bret = VerQueryValue(pver,<span class="str">"\",&pbuf,&uLen);
if (!bret)
return E_FAIL;//LastError();
memcpy(pvsf,pbuf,sizeof(VS_FIXEDFILEINFO));
delete[] pver;
return S_OK;
}
HRESULT LastError () {
HRESULT hr = HRESULT_FROM_WIN32(GetLastError());
if (SUCCEEDED(hr))
return E_FAIL;
return hr;
}
// This little function emits an error message based on WIN32 error messages
void EmitErrorMsg (HRESULT hr) {
char szMsg[1024];
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
hr,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
szMsg,
1024,
NULL
);
printf("</span>%sn<span class="str">",szMsg);
}