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

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;

	}



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将WinForm程序设置为默认打开指定类型的文件,您需要在注册表中进行相应的设置,具体步骤如下: 1. 打开您的WinForm项目,添加一个新的Windows Form,例如“FileViewerForm”。 2. 在“FileViewerForm”上添加一个“Label”控件,用来显示文件名。 3. 在“FileViewerForm”的代码文件中,添加以下代码: ```csharp using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WinFormDefaultApp { public partial class FileViewerForm : Form { public FileViewerForm(string filePath) { InitializeComponent(); label1.Text = filePath; } } } ``` 在这个例子中,我们使用“Label”控件来显示文件名,并在构造函数中将文件名作为参数进行传递。 4. 在“FileViewerForm”的设计视图中,右键单击表单并选择“属性”。找到“窗体”属性中的“文本”属性,并将其设置为“文件查看器”。 5. 添加一个新的类,例如“Program.cs”,并在其中添加以下代码: ```csharp using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace WinFormDefaultApp { static class Program { [STAThread] static void Main(string[] args) { if (args.Length > 0) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new FileViewerForm(args[0])); } } } } ``` 在这个例子中,我们在“Main”方法中检查了命令行参数的数量。如果有参数,则创建一个新的“FileViewerForm”窗体,并将第一个参数作为文件路径传递给它进行显示。 6. 在“WinFormDefaultApp”项目中,右键单击“添加新项”,选择“安装程序”并添加一个新的安装程序项目。 7. 在“安装程序”项目中,打开“File Types”(文件类型)视图,并添加一个新的文件类型。设置文件类型的名称、描述和文件扩展名。 8. 在“文件类型”视图中,选择“打开操作”,添加一个新的打开操作,并设置其路径为您的应用程序的可执行文件路径(例如“C:\Program Files\MyApp\MyApp.exe”),并在末尾添加一个空格和“%1”参数。 9. 将您的WinForm项目编译为可执行文件。 10. 在“安装程序”项目中,右键单击“发布”并生成安装程序。 11. 运行安装程序并按照提示完成安装。现在您的WinForm应用程序已经设置为默认打开指定类型的文件了。 要获取打开文件的信息,您可以在“FileViewerForm”的构造函数中对文件进行处理。例如,您可以使用以下代码获取文件名、路径和扩展名: ```csharp public FileViewerForm(string filePath) { InitializeComponent(); label1.Text = filePath; string fileName = Path.GetFileName(filePath); string fileDir = Path.GetDirectoryName(filePath); string fileExt = Path.GetExtension(filePath); } ``` 在这个例子中,我们使用了“System.IO”命名空间中的“Path”类来获取文件名、路径和扩展名。然后,您可以对文件进行进一步的处理或显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值