本人现在做一个这样项目,大致需求是这样的:客户想通过浏览器插件获得网络电台的URL,获得URL后,通过此URL获得媒体流并用自己的软件完成对媒体流的控制.现在项目的难点是怎么获得网络电台的URL. 我的思路是这样的:通过重载IInternetProtocol的START方法.判断每一次连接的MINE类型.如果类型是MP3/WAV/ASF等音频类型.就调用函数pOIBindInfo->GetBindString(BINDSTRING_URL,&pwzUrl,1,&uElFetched );获得类型.但在测试的时候,发现MP3类型文件都能获得.ASF的文件能够部分获得,WAV格式的文件根本获得不了,有懂这方面的高手吗?请不吝赐教::,谢谢
部分主要的代码如下:
STDMETHODIMP CGeturl::Start(LPCWSTR szUrl,IInternetProtocolSink *pOIProtSink,IInternetBindInfo *pOIBindInfo,DWORD grfPI,DWORD dwReserved)
{
USES_CONVERSION;
char *str=strlwr(OLE2A(szUrl));
if(strlen(str) > 4)//.mp3 and .wmv
{
char *wav=str+strlen(str)-4;//get the last four word
if((_strnicmp(wav,".wma",4)==0)||(_strnicmp(wav,".wmv",4)==0)||(_strnicmp(wav,".wmx",4)==0)||(_strnicmp(wav,".wax",4)==0)||(_strnicmp(wav,".wax",4)==0)||(_strnicmp(wav,".wvx",4)==0))//.mp3 ,.wma
{
LPOLESTR pwzUrl;
ULONG uElFetched;
LPCTSTR showurl;
pOIBindInfo->GetBindString(BINDSTRING_URL,&pwzUrl,1,&uElFetched );
showurl=OLE2T(pwzUrl);
//::MessageBox(NULL,showurl,_T("Forbidden!"),MB_ICONSTOP);
//pass the parameter of URL to the interface DLL
return INET_E_USE_DEFAULT_PROTOCOLHANDLER;
}
char *mp3=str+strlen(str)-4;//get the last four word
if((_strnicmp(mp3,".mp3",4)==0))//.mp3 ,.wma
{
LPOLESTR pwzUrl;
ULONG uElFetched;
LPCTSTR showurl;
pOIBindInfo->GetBindString(BINDSTRING_URL,&pwzUrl,1,&uElFetched );
showurl=OLE2T(pwzUrl);
//::MessageBox(NULL,showurl,_T("Forbidden!"),MB_ICONSTOP);
//pass the parameter of URL to the interface DLL
return INET_E_USE_DEFAULT_PROTOCOLHANDLER;
}
char *asf=str+strlen(str)-4;//get the last four word
if((_strnicmp(asf,".asx",4)==0)||(_strnicmp(asf,".rif",4)==0))//.mp3 ,.wma
{
LPOLESTR pwzUrl;
ULONG uElFetched;
LPCTSTR showurl;
pOIBindInfo->GetBindString(BINDSTRING_URL,&pwzUrl,1,&uElFetched );
showurl=OLE2T(pwzUrl);
//::MessageBox(NULL,showurl,_T("Forbidden!"),MB_ICONSTOP);
//pass the parameter of URL to the interface DLL
return INET_E_USE_DEFAULT_PROTOCOLHANDLER;
}
char *ram=str+strlen(str)-4;//get the last four word
if((_strnicmp(ram,".ram",4)==0)||(_strnicmp(ram,".rpm",4)==0))//.mp3 ,.wma
{
LPOLESTR pwzUrl;
ULONG uElFetched;
LPCTSTR showurl;
pOIBindInfo->GetBindString(BINDSTRING_URL,&pwzUrl,1,&uElFetched );
showurl=OLE2T(pwzUrl);
//::MessageBox(NULL,showurl,_T("Forbidden!"),MB_ICONSTOP);
//pass the parameter of URL to the interface DLL
return INET_E_USE_DEFAULT_PROTOCOLHANDLER;
}
}
if (strlen(str) >3)
{
char *rm=str+strlen(str)-3; //
if((_strnicmp(rm,".rm",3)==0))//RM
{
LPOLESTR pwzUrl;
ULONG uElFetched;
LPCTSTR showurl;
pOIBindInfo->GetBindString(BINDSTRING_URL,&pwzUrl,1,&uElFetched );
showurl=OLE2T(pwzUrl);
//::MessageBox(NULL,showurl,"",MB_ICONSTOP);
//pass the parameter of URL to the interface DLL
return INET_E_USE_DEFAULT_PROTOCOLHANDLER;//
}
}
return INET_E_USE_DEFAULT_PROTOCOLHANDLER;
}注册代码如下::
USES_CONVERSION;
mCookie=0;
HRESULT hr = CoGetClassObject(CLSID_Geturl, CLSCTX_SERVER, NULL, IID_IClassFactory, (void**)&m_pFactory);
if(hr==S_OK)
{
if(CoInternetGetSession(0, &m_pSession, 0)==S_OK)
m_pSession->RegisterNameSpace(m_pFactory, CLSID_Geturl, L"http", 0, NULL, 0); //监视HTTP服务
}
部分主要的代码如下:
STDMETHODIMP CGeturl::Start(LPCWSTR szUrl,IInternetProtocolSink *pOIProtSink,IInternetBindInfo *pOIBindInfo,DWORD grfPI,DWORD dwReserved)
{
USES_CONVERSION;
char *str=strlwr(OLE2A(szUrl));
if(strlen(str) > 4)//.mp3 and .wmv
{
char *wav=str+strlen(str)-4;//get the last four word
if((_strnicmp(wav,".wma",4)==0)||(_strnicmp(wav,".wmv",4)==0)||(_strnicmp(wav,".wmx",4)==0)||(_strnicmp(wav,".wax",4)==0)||(_strnicmp(wav,".wax",4)==0)||(_strnicmp(wav,".wvx",4)==0))//.mp3 ,.wma
{
LPOLESTR pwzUrl;
ULONG uElFetched;
LPCTSTR showurl;
pOIBindInfo->GetBindString(BINDSTRING_URL,&pwzUrl,1,&uElFetched );
showurl=OLE2T(pwzUrl);
//::MessageBox(NULL,showurl,_T("Forbidden!"),MB_ICONSTOP);
//pass the parameter of URL to the interface DLL
return INET_E_USE_DEFAULT_PROTOCOLHANDLER;
}
char *mp3=str+strlen(str)-4;//get the last four word
if((_strnicmp(mp3,".mp3",4)==0))//.mp3 ,.wma
{
LPOLESTR pwzUrl;
ULONG uElFetched;
LPCTSTR showurl;
pOIBindInfo->GetBindString(BINDSTRING_URL,&pwzUrl,1,&uElFetched );
showurl=OLE2T(pwzUrl);
//::MessageBox(NULL,showurl,_T("Forbidden!"),MB_ICONSTOP);
//pass the parameter of URL to the interface DLL
return INET_E_USE_DEFAULT_PROTOCOLHANDLER;
}
char *asf=str+strlen(str)-4;//get the last four word
if((_strnicmp(asf,".asx",4)==0)||(_strnicmp(asf,".rif",4)==0))//.mp3 ,.wma
{
LPOLESTR pwzUrl;
ULONG uElFetched;
LPCTSTR showurl;
pOIBindInfo->GetBindString(BINDSTRING_URL,&pwzUrl,1,&uElFetched );
showurl=OLE2T(pwzUrl);
//::MessageBox(NULL,showurl,_T("Forbidden!"),MB_ICONSTOP);
//pass the parameter of URL to the interface DLL
return INET_E_USE_DEFAULT_PROTOCOLHANDLER;
}
char *ram=str+strlen(str)-4;//get the last four word
if((_strnicmp(ram,".ram",4)==0)||(_strnicmp(ram,".rpm",4)==0))//.mp3 ,.wma
{
LPOLESTR pwzUrl;
ULONG uElFetched;
LPCTSTR showurl;
pOIBindInfo->GetBindString(BINDSTRING_URL,&pwzUrl,1,&uElFetched );
showurl=OLE2T(pwzUrl);
//::MessageBox(NULL,showurl,_T("Forbidden!"),MB_ICONSTOP);
//pass the parameter of URL to the interface DLL
return INET_E_USE_DEFAULT_PROTOCOLHANDLER;
}
}
if (strlen(str) >3)
{
char *rm=str+strlen(str)-3; //
if((_strnicmp(rm,".rm",3)==0))//RM
{
LPOLESTR pwzUrl;
ULONG uElFetched;
LPCTSTR showurl;
pOIBindInfo->GetBindString(BINDSTRING_URL,&pwzUrl,1,&uElFetched );
showurl=OLE2T(pwzUrl);
//::MessageBox(NULL,showurl,"",MB_ICONSTOP);
//pass the parameter of URL to the interface DLL
return INET_E_USE_DEFAULT_PROTOCOLHANDLER;//
}
}
return INET_E_USE_DEFAULT_PROTOCOLHANDLER;
}注册代码如下::
USES_CONVERSION;
mCookie=0;
HRESULT hr = CoGetClassObject(CLSID_Geturl, CLSCTX_SERVER, NULL, IID_IClassFactory, (void**)&m_pFactory);
if(hr==S_OK)
{
if(CoInternetGetSession(0, &m_pSession, 0)==S_OK)
m_pSession->RegisterNameSpace(m_pFactory, CLSID_Geturl, L"http", 0, NULL, 0); //监视HTTP服务
}
解决方案 »
- C2065 m_szProductDesc1未声明的标识符; C3861 UpdateData 找不到标识符
- 为何第一次编译总是报这个错呢?生成一次exe执行后,就不报这个错了,这个提示是什么意思?
- 一个简单但没解决的问题
- vc6对多线程支持的设置问题.
- 用那个函数可以去掉字符串的前导和尾部空格?
- 如何用c++获得windows里面的各种dmi结构体?
- 请各位兄弟姐妹给我一点意见!
- 有谁知道VC的插件Windows Tabs3.05的注册码?
- 双击视频文件,播放器界面显示不完整
- ATL 菜单按钮项隐藏后刷新又出现了
- vc(ATL COM)编程中excel怎样调用activex控件
- 关于VISIO的问题
谢谢,怎么解决的?