注册你自己的伪协议

注册你自己的伪协议

如果你安装了QQ或者TM,在地址栏输入如下形式:tencent://Message/?uin=xxxxxx&websiteName=q-zone.qq.com&Menu=yes

便会调用Timwp.exe会进行解析处理。

这种形如标准协议HTTP,FTP的自定义协议叫做伪协议。如何注册一个伪协议?其实很简单,只要修改注册表相关地方即可。下面是注册伪协议的函数:

// ***************************************************************
// function : AddFakePro
// purpose   : 注册一个伪协议
//     
// parameter : [IN] lpProName 协议名字,其实就是伪协议的标识
//                    [IN] lpProDescription 伪协议的描述
//                    [IN] lpExePath 遇到该伪协议时,系统会自动调用这个EXE程序进行解析
//
// author   : liangyu
// created   : 2008-1-30   14:10
// ***************************************************************

BOOL AddFakePro(char *lpProName, char *lpProDescription, char *lpExePath)
{
BOOL bRet = FALSE;
HKEY hKey = NULL;
HKEY hSubKey = NULL;//hKey的子键
HKEY hSubKey2 = NULL;//hSubKey得子键
HKEY hSubKey3 = NULL;//hSubKey2的子键

if (ERROR_SUCCESS != RegCreateKeyEx(HKEY_CLASSES_ROOT, lpProName, 0, NULL,
   REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL))
{
   RegCloseKey(hKey);
   return bRet;
}
if (ERROR_SUCCESS != RegSetValueEx(hKey, NULL, 0, REG_SZ, //这是协议描述
   (LPBYTE)lpProDescription, strlen(lpProDescription)+1))
{
   RegCloseKey(hKey);
   return bRet;
}
if (ERROR_SUCCESS != RegSetValueEx(hKey, "URL Protocol", 0, REG_SZ, //这一步不可少,否则出现语法错误
   (LPBYTE)lpExePath, strlen(lpExePath)+1))
{
   RegCloseKey(hKey);
   return bRet;
}
//图标在下面设置
if (ERROR_SUCCESS != RegCreateKeyEx(hKey, "DefaultIcon", 0, NULL,
   REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, NULL))
{
   RegCloseKey(hKey);
   RegCloseKey(hSubKey);
   return bRet;
}

//图标在上面设置
RegCloseKey(hSubKey);

if (ERROR_SUCCESS != RegCreateKeyEx(hKey, "shell", 0, NULL,
   REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, NULL))
{
   RegCloseKey(hKey);
   RegCloseKey(hSubKey);
   return bRet;
}
if (ERROR_SUCCESS != RegCreateKeyEx(hSubKey, "open", 0, NULL,
   REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey2, NULL))
{
   RegCloseKey(hKey);
   RegCloseKey(hSubKey);
   RegCloseKey(hSubKey2);
   return bRet;
}
if (ERROR_SUCCESS != RegCreateKeyEx(hSubKey2, "command", 0, NULL,
   REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey3, NULL))
{
   RegCloseKey(hKey);
   RegCloseKey(hSubKey);
   RegCloseKey(hSubKey2);
   RegCloseKey(hSubKey3);
   return bRet;
}
CString strCommand;
strCommand += "\"";
strCommand += lpExePath;
strCommand += "\"";
strCommand += " ";
strCommand += "\"";
strCommand += "%1";
strCommand += "\"";
if (ERROR_SUCCESS == RegSetValueEx(hSubKey3, NULL, 0, REG_SZ, //这一步不可少,否则无法触发
   (LPBYTE)(LPCTSTR)strCommand, strCommand.GetLength()+1))
{
   bRet = TRUE;
}
RegCloseKey(hSubKey3);
RegCloseKey(hSubKey2);
RegCloseKey(hSubKey);
RegCloseKey(hKey);

return bRet;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值