获取文件默认打开路径,获取文件右键属性,详细信息

4 篇文章 0 订阅
#include<Shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")
#pragma comment(lib, "version.lib")
	
//获取文件默认打开的应用程序路径
	DWORD size = 0;
	CString str;
	HRESULT hr = ::AssocQueryString(ASSOCF_NOFIXUPS | ASSOCF_VERIFY, ASSOCSTR_EXECUTABLE, L".cxp", NULL, NULL, &size);
	if (hr == S_FALSE)
	{
		wchar_t *wcstring = (wchar_t *)malloc(sizeof(wchar_t)*(size));
		hr = ::AssocQueryString(ASSOCF_NOFIXUPS | ASSOCF_VERIFY, ASSOCSTR_EXECUTABLE, L".cxp", NULL, wcstring, &size);

		
		DWORD dwMinSize = 0;
		LPSTR lpszStr = NULL;
		dwMinSize = WideCharToMultiByte(CP_OEMCP, NULL, wcstring, -1, NULL, 0, NULL, FALSE);
		if (0 == dwMinSize)
		{

		}
		lpszStr = new char[dwMinSize];
		WideCharToMultiByte(CP_OEMCP, NULL, wcstring, -1, lpszStr, dwMinSize, NULL, FALSE);
		str = lpszStr;
		delete[] lpszStr;

		if (hr == S_OK)
		{
			
		}
	}

	DWORD dwSize = GetFileVersionInfoSize(str, NULL);
	if (dwSize != 0)
	{
		UINT nSize = dwSize * sizeof(TCHAR);
		LPVOID pBlock = new TCHAR[nSize];
		memset(pBlock, 0, nSize);
		GetFileVersionInfo(str, 0, dwSize, pBlock);

		char* pVerValue = NULL;
		UINT pBufLen = 0;
		VerQueryValue(pBlock, _T("\\VarFileInfo\\Translation"),
			(LPVOID*)&pVerValue, &pBufLen);
		CString strSubBlock, strTranslation, strTemp;
		strTemp.Format(_T("000%x"), *((unsigned short int *)pVerValue));

		strTranslation = strTemp.Right(4);
		strTemp.Format(_T("000%x"), *((unsigned short int *)&pVerValue[2]));
		strTranslation += strTemp.Right(4);

		//文件描述 
		strSubBlock.Format(_T("\\StringFileInfo\\%s\\FileDescription"), strTranslation);
		VerQueryValue(pBlock, strSubBlock.GetBufferSetLength(256), (LPVOID*)&pVerValue, &nSize);
		strSubBlock.ReleaseBuffer();
		strTemp.Format(_T("文件描述: %s"), pVerValue);

		//内部名称 
		strSubBlock.Format(_T("\\StringFileInfo\\%s\\InternalName"), strTranslation);
		VerQueryValue(pBlock, strSubBlock.GetBufferSetLength(256), (LPVOID*)&pVerValue, &nSize);
		strSubBlock.ReleaseBuffer();
		strTemp.Format(_T("文件描述: %s"), pVerValue);

		//合法版权 
		strSubBlock.Format(_T("\\StringFileInfo\\%s\\LegalTradeMarks"), strTranslation);
		VerQueryValue(pBlock, strSubBlock.GetBufferSetLength(256), (LPVOID*)&pVerValue, &nSize);
		strSubBlock.ReleaseBuffer();
		strTemp.Format(_T("合法版权: %s"), pVerValue);

		//原始文件名 
		strSubBlock.Format(_T("\\StringFileInfo\\%s\\OriginalFileName"), strTranslation);
		VerQueryValue(pBlock, strSubBlock.GetBufferSetLength(256), (LPVOID*)&pVerValue, &nSize);
		strSubBlock.ReleaseBuffer();
		strTemp.Format(_T("原始文件名: %s"), pVerValue);

		//产品名称 
		strSubBlock.Format(_T("\\StringFileInfo\\%s\\ProductName"), strTranslation);
		VerQueryValue(pBlock, strSubBlock.GetBufferSetLength(256), (LPVOID*)&pVerValue, &nSize);
		strSubBlock.ReleaseBuffer();
		strTemp.Format(_T("产品名称: %s"), pVerValue);

		//产品版本 
		strSubBlock.Format(_T("\\StringFileInfo\\%s\\ProductVersion"), strTranslation);
		VerQueryValue(pBlock, strSubBlock.GetBufferSetLength(256), (LPVOID*)&pVerValue, &nSize);
		strSubBlock.ReleaseBuffer();
		strTemp.Format(_T("产品版本: %s"), pVerValue);

		delete[] pBlock;

	}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值