WEB开发网
开发学院软件开发VC 仿腾讯QQ和Skype 通过URL触发自己的程序 阅读

仿腾讯QQ和Skype 通过URL触发自己的程序

 2010-08-22 20:47:23 来源:WEB开发网   
核心提示:以下源代码将实现注册一个新的自定义的Web协议: 注册自定义的Web协议// return : //0-失败//1-成功//2-已经存在//int RegWebProtocol ( LPCTSTR lpszProtocolName, LPCTSTR lpszAssociatedApp, int nIconIndex/*

以下源代码将实现注册一个新的自定义的Web协议:

//
// 注册自定义的Web协议
// return : ------------------------------------------------------------------------
//    0  -  失败
//    1  -  成功
//    2  -  已经存在
//
int RegWebProtocol ( LPCTSTR lpszProtocolName, LPCTSTR lpszAssociatedApp, int nIconIndex/*=0*/ )
{
  if ( !lpszProtocolName ||
     lstrlen(lpszProtocolName) < 1 ||
     !lpszAssociatedApp ||
     lstrlen(lpszAssociatedApp) < 1 )
    return 0;
  CString csSubKey;
  DWORD dwBufSize = 0;
  // 该协议已经存在
  HKEY hKey = NULL;
  if ( RegOpenKeyEx ( HKEY_CLASSES_ROOT,
        lpszProtocolName,
        0,
        KEY_ALL_ACCESS,
        &hKey ) == ERROR_SUCCESS )
  {
    return 2;
  }
  else hKey = NULL;
  // 创建协议子键
  if ( !CreateRegisterSubKey ( HKEY_CLASSES_ROOT, lpszProtocolName ) )
    return 0;
  // 设置协议描述字符串
  CString csProtocolDesc; csProtocolDesc.Format ( _T("%sProtocol"), lpszProtocolName );
  dwBufSize = csProtocolDesc.GetLength();
  if ( !WriteRegister ( HKEY_CLASSES_ROOT, lpszProtocolName,
    _T(""), REG_EXPAND_SZ, (PUCHAR)csProtocolDesc.GetBuffer(0),&dwBufSize) )
    return 0;
  CString csAppFile; csAppFile.Format ( _T("%s"), lpszAssociatedApp );
  dwBufSize = csAppFile.GetLength();
  if ( !WriteRegister ( HKEY_CLASSES_ROOT, lpszProtocolName,
    _T("URL Protocol"), REG_EXPAND_SZ, (PUCHAR)csAppFile.GetBuffer(0),&dwBufSize) )
    return 0;
  // DefaultIcon 子键
  csSubKey.Format ( _T("%sDefaultIcon"), lpszProtocolName );
  if ( !CreateRegisterSubKey ( HKEY_CLASSES_ROOT, csSubKey ) )
    return 0;
  CString csIconParameter; csIconParameter.Format ( _T("%s,%d"), lpszAssociatedApp, nIconIndex );
  dwBufSize = csIconParameter.GetLength();
  if ( !WriteRegister ( HKEY_CLASSES_ROOT, csSubKey,
    _T(""), REG_EXPAND_SZ, (PUCHAR)csIconParameter.GetBuffer(0),&dwBufSize) )
    return 0;
  // shellopencommand 子键
  csSubKey.Format ( _T("%sshellopencommand"), lpszProtocolName );
  if ( !CreateRegisterSubKey ( HKEY_CLASSES_ROOT, csSubKey ) )
    return 0;
  CString csCommand; csCommand.Format ( _T(""%s" "%%1""), lpszAssociatedApp );
  dwBufSize = csCommand.GetLength();
  if ( !WriteRegister ( HKEY_CLASSES_ROOT, csSubKey,
    _T(""), REG_EXPAND_SZ, (PUCHAR)csCommand.GetBuffer(0),&dwBufSize) )
    return 0;
  return 1;
}

Tags:腾讯 QQ Skype

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接