vc中头文件与android程序如何关联,VC++实现文件与应用程序关联的方法(注册表修改)...

本文实例讲述了VC++实现文件与应用程序关联的方法。分享给大家供大家参考,具体如下:

日常工作中,doc文件直接双击后,就能启动word软件,并读取该文档的内容在软件中显示,这都得益于注册表的配置,我们的软件也需要实现这样的功能,该如何写注册表以及写入哪些内容呢?下面的两个函数就能实现这个功能。CheckFileRelation是检查注册表中是否已经将我们期待的文件格式与相应软件关联了;RegisterFileRelation是直接往注册表中写入相关的key和value。

/****************************************************

* 检测文件关联情况

* strExt: 要检测的扩展名(例如: ".txt")

* strAppKey: ExeName扩展名在注册表中的键值(例如: "txtfile")

* 返回TRUE: 表示已关联,FALSE: 表示未关联

******************************************************/

BOOL CheckFileRelation(const char *strExt, const char *strAppKey)

{

int nRet=FALSE;

HKEY hExtKey;

char szPath[_MAX_PATH];

DWORD dwSize=sizeof(szPath);

if(RegOpenKey(HKEY_CLASSES_ROOT,strExt,&hExtKey)==ERROR_SUCCESS)

{

RegQueryValueEx(hExtKey,NULL,NULL,NULL,(LPBYTE)szPath,&dwSize);

if(_stricmp(szPath,strAppKey)==0)

{

nRet=TRUE;

}

RegCloseKey(hExtKey);

return nRet;

}

return nRet;

}

/****************************************************

* 注册文件关联

* strExe: 要检测的扩展名(例如: ".txt")

* strAppName: 要关联的应用程序名(例如: "C:/MyApp/MyApp.exe")

* strAppKey: ExeName扩展名在注册表中的键值(例如: "txtfile")

* strDefaultIcon: 扩展名为strAppName的图标文件(例如: *"C:/MyApp/MyApp.exe,0")

* strDescribe: 文件类型描述

****************************************************/

void RegisterFileRelation(char *strExt, char *strAppName, char *strAppKey, char *strDefaultIcon, char *strDescribe)

{

char strTemp[_MAX_PATH];

HKEY hKey;

RegCreateKey(HKEY_CLASSES_ROOT,strExt,&hKey);

RegSetValue(hKey,"",REG_SZ,strAppKey,strlen(strAppKey)+1);

RegCloseKey(hKey);

RegCreateKey(HKEY_CLASSES_ROOT,strAppKey,&hKey);

RegSetValue(hKey,"",REG_SZ,strDescribe,strlen(strDescribe)+1);

RegCloseKey(hKey);

sprintf(strTemp,"%s//DefaultIcon",strAppKey);

RegCreateKey(HKEY_CLASSES_ROOT,strTemp,&hKey);

RegSetValue(hKey,"",REG_SZ,strDefaultIcon,strlen(strDefaultIcon)+1);

RegCloseKey(hKey);

sprintf(strTemp,"%s//Shell",strAppKey);

RegCreateKey(HKEY_CLASSES_ROOT,strTemp,&hKey);

RegSetValue(hKey,"",REG_SZ,"Open",strlen("Open")+1);

RegCloseKey(hKey);

sprintf(strTemp,"%s//Shell//Open//Command",strAppKey);

RegCreateKey(HKEY_CLASSES_ROOT,strTemp,&hKey);

sprintf(strTemp,"%s /"%%1/"",strAppName);

RegSetValue(hKey,"",REG_SZ,strTemp,strlen(strTemp)+1);

RegCloseKey(hKey);

}

有了这两个函数后,可以实现文档和软件的关联了,但是双击文档后,又是如何读取文档的内容的呢?这里主要是用到了命令行参数,我们需要在CTestApp的InitInstance函数获取命令行参数,如:

BOOL CTestApp::InitInstance()

{

//这里的m_lpCmdLine是CWinApp的成员变量,双击文档时,文档的路径会传给该参数

CString pathName = m_lpCmdLine;

if (pathName != _T(""))

{

//TODO:读取文件、解析文件、呈现文件

}

}

希望本文所述对大家VC++程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值