logo资料库

MFC(C++)程序与文件关联(后缀名)含CRegRelateExt 代码.docx

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
MFC程序与文件关联
MFC 程序与文件关联 之前转载过一篇这方面的文章:VC 中建立程序的关联文件【http://www.mydreamsky.tk/?p=906】,但 发现用上面的方法,虽然能建立程序与文件的关联,但一旦我们的程序放在另一个目录了,就会出去 很多问题。因此想从注册表的角度上来解决这个问题,因为程序关联其实就是在注册表上进行操作的。 网上找了下,已经有前辈在这方面做了不少工作,甚至还有人已经将整个操作封装成了一个很好调用 的类。 那个类的下载:http://download.csdn.net/detail/viviwen123/4359353。用法上面有。 再贴一段在程序中具体使用的例子: --------------------- 作者:WillenWu 来源:CSDN 原文:https://blog.csdn.net/viviwen123/article/details/8465809 版权声明:本文为博主原创文章,转载请附上博文链接! //测试文件关联 void CMainFrame::OnTestRegRelateExt() { CString strFileExt = TEXT(".apk"); CRegRelateExt RegRelateExt; BOOL sign sign = true; = RegRelateExt.Delete(strFileExt);// 删除.apk 与任何程序的关联 TCHAR exeFullPath[MAX_PATH]; // MAX_PATH GetModuleFileName(NULL, exeFullPath,MAX_PATH);//得到程序模块名称,全路径 CString currentExe = (CString)exeFullPath + " %1"; sign=RegRelateExt.Set(strFileExt, currentExe); if (sign) { MessageBox(TEXT("设置关联成功!")); //注意," %1"有空格 } else { } } MessageBox(TEXT("设置关联失败!")); 以下是类的头文件 // RegRelateExt.h: interface for the CRegRelateExt class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_REGRELATEEXT_H__6DE7E979_9011_4639_967A_D8817DF4DE44_ _INCLUDED_) #define AFX_REGRELATEEXT_H__6DE7E979_9011_4639_967A_D8817DF4DE44__INCLUDED _
#include "ATLBASE.h" #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class CRegRelateExt : public CRegKey { //////////////////////////////////////////// ///Check 用于检查某个扩展名是否与指定程序关联; ///Set 用于将某个扩展名的文件与指定程序进行关联; ///Delete 用于删除某个文件类型的关联。 //////////////////////////////////////////// public: CRegRelateExt(); CRegRelateExt(CString FileExt, CString RelateExe = _T("XXX.exe")); virtual ~CRegRelateExt(); BOOL Check(); BOOL Check(CString FileExt); BOOL Set(CString FileExt, CString ShellCmd); BOOL Delete(CString FileExt); private: }; BOOL m_IfRelated; CString m_RegClass; CString m_RelateExe; #endif // !defined(AFX_REGRELATEEXT_H__6DE7E979_9011_4639_967A_D8817DF4DE44__ INCLUDED_) 以下是类的实现文件 #include "stdafx.h" //#include "LibMaker.h" #include "RegRelateExt.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif CRegRelateExt::CRegRelateExt() { m_IfRelated = FALSE; } CRegRelateExt::~CRegRelateExt() {
} CRegRelateExt::CRegRelateExt(CString FileExt, CString RelateExe) { m_RelateExe = RelateExe; Check(FileExt); } BOOL CRegRelateExt::Check() { return m_IfRelated; } BOOL CRegRelateExt::Check(CString FileExt) { if(m_RelateExe.IsEmpty()) return FALSE; m_IfRelated = FALSE; //用于检测是否关联,参数为后缀名 if(Open(HKEY_CLASSES_ROOT, FileExt, KEY_READ) != ERROR_SUCCESS) DWORD ValueLen = MAX_PATH; TCHAR Value[MAX_PATH]; if(QueryValue(Value, _T(""), &ValueLen) != ERROR_SUCCESS) m_IfRelated = FALSE; Close(); m_RegClass = Value; if(Open(HKEY_CLASSES_ROOT, m_RegClass + _T("\\shell\\open\\command"), KEY_READ) != ERROR_SUCCESS) m_IfRelated = FALSE; ValueLen = MAX_PATH; if(QueryValue(Value, _T(""), &ValueLen) != ERROR_SUCCESS) m_IfRelated = FALSE; Close(); CString CmdLine = Value; if(CmdLine.Find(m_RelateExe) != -1) m_IfRelated = TRUE; else m_IfRelated = FALSE; return m_IfRelated; } BOOL CRegRelateExt::Delete(CString FileExt) { if(FileExt.IsEmpty()) return FALSE; return FALSE; if(Open(HKEY_CLASSES_ROOT, FileExt, KEY_READ) != ERROR_SUCCESS) DWORD ValueLen = MAX_PATH; TCHAR Value[MAX_PATH]; if(QueryValue(Value, _T(""), &ValueLen) != ERROR_SUCCESS) return FALSE; Close(); Attach(HKEY_CLASSES_ROOT);
if(RecurseDeleteKey(Value) != ERROR_SUCCESS) if(RecurseDeleteKey(FileExt) != ERROR_SUCCESS) return FALSE; return FALSE; return TRUE; } BOOL CRegRelateExt::Set(CString FileExt, CString ShellCmd) { if(FileExt.IsEmpty() || ShellCmd.IsEmpty()) return FALSE; m_RelateExe = ShellCmd; m_RegClass = _T("Rzmk File"); Delete(FileExt); if(Create(HKEY_CLASSES_ROOT, FileExt) != ERROR_SUCCESS) if(SetValue(HKEY_CLASSES_ROOT, FileExt, m_RegClass) != ERROR_SUCCESS) if(Create(HKEY_CLASSES_ROOT, m_RegClass) != ERROR_SUCCESS) if(SetValue(HKEY_CLASSES_ROOT, m_RegClass, _T("XXX File")) != if(SetValue((DWORD)0x08, _T("BrowserFlags")) != ERROR_SUCCESS) if(SetValue((DWORD)0x00, _T("EditFlags")) != ERROR_SUCCESS) if(SetValue(HKEY_CLASSES_ROOT, m_RegClass, _T("XXX File")) != if(Create(HKEY_CLASSES_ROOT, m_RegClass + _T("\\DefaultIcon")) != return FALSE; return FALSE; return FALSE; ERROR_SUCCESS) return FALSE; return FALSE; return FALSE; ERROR_SUCCESS) return FALSE; ERROR_SUCCESS) return FALSE; if(SetValue(HKEY_CLASSES_ROOT, m_RegClass + _T("\\DefaultIcon"), ShellCmd + _T("XXX.ico")) != ERROR_SUCCESS) return FALSE; ERROR_SUCCESS) return FALSE; ERROR_SUCCESS) return FALSE; != ERROR_SUCCESS) return FALSE; if(Create(HKEY_CLASSES_ROOT, m_RegClass + _T("\\shell")) != if(Create(HKEY_CLASSES_ROOT, m_RegClass + _T("\\shell\\open")) != if(Create(HKEY_CLASSES_ROOT, m_RegClass + _T("\\shell\\open\\command")) TCHAR exeFullPath[MAX_PATH]; GetModuleFileName(NULL,exeFullPath,MAX_PATH);
if(SetValue(HKEY_CLASSES_ROOT,m_RegClass + _T("\\shell\\open\\command"), (CString)(exeFullPath) + _T(" \"%1\"")) != ERROR_SUCCESS) return FALSE; m_IfRelated = TRUE; return TRUE; }
分享到:
收藏