请教下用RIL来处理来电问题,想阻止系统接受RIL_NOTIFY_RING和RIL_NOTIFY_CALLERID有办法么,然后自己处理这几个消息

panyunone 2007-12-09 08:02:25
请教下用RIL来处理来电问题,想阻止系统接受RIL_NOTIFY_RING和RIL_NOTIFY_CALLERID有办法么,然后自己处理这几个消息,并显示自己的来电界面.

我写了代码,但是执行不到回调函数里面,是什么原因呢,如果用RIL能实现上面的功能么?
代码如下:

typedef void (*PFVOID)();
typedef HRESULT (*PFRIL_Initialize)(DWORD dwIndex, PFVOID pfnResult, PFVOID pfnNotify, DWORD dwNotificationClasses, DWORD dwParam, HANDLE *hRil);
typedef HRESULT (*PFRIL_Deinitialize)(HANDLE hRil);
typedef HRESULT (*PFRIL_GetRegistrationStatus)(HANDLE hRil);
typedef HRESULT (*PFRIL_GetCellTowerInfo)(HANDLE hRil);
typedef HRESULT (*PFRIL_DevSpecific)(HANDLE hRil, BYTE*buf, int size);

PFRIL_Deinitialize RIL_Deinitialize;
PFRIL_Initialize RIL_Initialize;
PFRIL_GetRegistrationStatus RIL_GetRegistrationStatus;
PFRIL_GetCellTowerInfo RIL_GetCellTowerInfo;
PFRIL_DevSpecific RIL_DevSpecific;

fnInitRil()
{
m_hRilDll = LoadLibrary(L"ril.dll");
if (m_hRilDll)
{
RIL_Initialize= (PFRIL_Initialize)GetProcAddress(m_hRilDll,L"RIL_Initialize");

RIL_Deinitialize= (PFRIL_Deinitialize)GetProcAddress(m_hRilDll, L"RIL_Deinitialize");

RIL_GetRegistrationStatus= (PFRIL_GetRegistrationStatus)GetProcAddress(m_hRilDll, L"RIL_GetRegistrationStatus");

RIL_GetCellTowerInfo= (PFRIL_GetCellTowerInfo)GetProcAddress(m_hRilDll, L"RIL_GetCellTowerInfo");

RIL_DevSpecific= (PFRIL_DevSpecific)GetProcAddress(m_hRilDll, L"RIL_DevSpecific");

HRESULT hResult = 0;
hResult = RIL_Initialize(1, NULL, PFVOID(NotifyProc), -1, (DWORD)this, NULL);
GetLastError(); //retVal = TRUE;
}
}


LRESULT CALLBACK NotifyProc(DWORD dwCode, const void *lpData, DWORD cbData, DWORD dwParam)
{
switch(dwCode)
{
case RIL_NOTIFY_CONNECT:
break;
case RIL_NOTIFY_DISCONNECT:
break;
case RIL_NOTIFY_CALLERID:
break;
case RIL_NOTIFY_RING :
break;
case RIL_NOTIFY_CALLPROGRESSINFO:
break;

default:
break;
}

return 1;

}

执行不到NotifyProc回调函数里面,请问下
typedef HRESULT (*PFRIL_Initialize)(DWORD dwIndex, PFVOID pfnResult, PFVOID pfnNotify, DWORD dwNotificationClasses, DWORD dwParam, HANDLE *hRil);

我是用下面的这个弄的
RIL_Initialize(1, NULL, PFVOID(NotifyProc), -1, (DWORD)this, NULL)
里面的参数如何定义呢?还是其他的问题呢??



...全文
1160 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
liaoxiuhua 2008-12-30
  • 打赏
  • 举报
回复
也在做相关的内容,顶一个
xqhrs232 2008-11-18
  • 打赏
  • 举报
回复
COPY楼主的代码,在VS2005里面就编译不过去啊!!!为什么???
xqhrs232 2008-11-18
  • 打赏
  • 举报
回复
不知道楼主有没成功啊!!!
xqhrs232 2008-11-18
  • 打赏
  • 举报
回复
不错的贴!DING!!!
wpf2006 2008-08-01
  • 打赏
  • 举报
回复
那个ril.dll能不能发个给我啊 ,谢谢了。。。35248710@qq.com
l1w1w1 2008-03-17
  • 打赏
  • 举报
回复
学习了
lenux 2008-01-15
  • 打赏
  • 举报
回复
Mark
Seven_zhangxw 2008-01-14
  • 打赏
  • 举报
回复
留个胶印,跟踪一下!
侯炯 2008-01-03
  • 打赏
  • 举报
回复
HRESULT hr = (*s_pfRIL_Initialize)(1, ResultCallback, NotifyCallback, RIL_NCLASS_ALL, NULL, &m_hRil);


void CALLBACK ResultCallback(DWORD dwCode, HRESULT hrCmdID, const void* lpData, DWORD cbData, DWORD dwParam)
{
DWORD *dwNum;
switch (dwCode)
{
case RIL_RESULT_OK:
dwNum = (DWORD*)lpData;
break;
case RIL_RESULT_NOCARRIER:
case RIL_RESULT_NODIALTONE:
case RIL_RESULT_ERROR:
case RIL_RESULT_BUSY:
break;
}
}

void CALLBACK NotifyCallback(DWORD dwCode, const void* lpData, DWORD cbData, DWORD dwParam)
{
RILMESSAGE *pMessage = (RILMESSAGE *)lpData;


switch (dwCode)
{
case RIL_NOTIFY_CONNECT:
case RIL_NOTIFY_DISCONNECT:
case RIL_NOTIFY_RING:
break;
case RIL_NOTIFY_MESSAGE: //通知消息,也就是我们要处理的消息
AfxMessageBox(_T("hh"));
ofstream ofile(" 1.txt ");
ofile<< pMessage->cbSize<<endl
<<pMessage->dwFlags<<endl
<<pMessage->dwParams<<endl
<<pMessage->dwType<<endl
<<"\nstart struct:==============="<<endl
<<pMessage->raSvcCtrAddress.cbSize<<endl
<<pMessage->raSvcCtrAddress.dwNumPlan<<endl
<<pMessage->raSvcCtrAddress.dwParams<<endl
<<pMessage->raSvcCtrAddress.dwType<<endl
<<pMessage->raSvcCtrAddress.wszAddress<<endl
<<"end struct:==============="<<endl
<<"\nstart struct:==============="<<endl
<<pMessage->msgBcGeneral.cchMsgLength<<endl
<<pMessage->msgBcGeneral.dwGeoScope<<endl
<<pMessage->msgBcGeneral.dwID<<endl
<<pMessage->msgBcGeneral.dwMsgCode<<endl
<<pMessage->msgBcGeneral.dwPageNumber<<endl
<<pMessage->msgBcGeneral.dwTotalPages<<endl
<<pMessage->msgBcGeneral.dwUpdateNumber<<endl
<<pMessage->msgBcGeneral.rgbMsg<<endl
<<"end struct:==============="<<endl;
ofile.close();

ofstream ofile2(" 2.txt ");
ofile2<<pMessage->msgInDeliver.raOrigAddress.wszAddress<<endl
<<pMessage->msgInDeliver.rgbMsg<<endl;
ofile2.close();
exit(0);
if(pMessage->dwParams & RIL_PARAM_M_FLAGS)
{
if(pMessage->dwFlags == RIL_MSGFLAG_NONE)
{
break;
}
}



//MMS_Decode(pMessage->msgInDeliver.rgbMsg, pMessage->msgInDeliver.cchMsgLength);

break;
}
}
打印的能捕获你接受的消息
但怎么发送呢?
我还不知道!



coolbird0416 2007-12-13
  • 打赏
  • 举报
回复
关键是系统总会收到来电消息,总会弹出来电窗口,无论你用RIL或TAPI都没用
ppcat_001 2007-12-11
  • 打赏
  • 举报
回复
界面替换后整个就由你控制啊,至于来电声音,可以在RIL_Ring的时候干掉
panyunone 2007-12-11
  • 打赏
  • 举报
回复
但是我并不只是替换界面,我想控制来电界面,来电时候,需要的时候显示,不需要的时候不显示,并且没有系统来电声音,根据需要什么时候播放,就什么时候调用自己的程序播放音乐.
载舟之水 2007-12-10
  • 打赏
  • 举报
回复
5.0以上的系统来电界面功能是可以自定义的,你并不需要替换。
具体用法查询 Phone Canvas Customization
ppcat_001 2007-12-10
  • 打赏
  • 举报
回复
自己的来电界面我已经实现了
不过不是采用的ril的方法,而是在注册表添加了自己处理拨号基面的dll
源码可以看我的blog
就是还有一点小bug,开始弹出的界面修改背景后被系统本身的给重绘了
其他的功能已经全部实现了~
panyunone 2007-12-10
  • 打赏
  • 举报
回复
主要是用系统的来电,自己的程序不好处理,
panyunone 2007-12-10
  • 打赏
  • 举报
回复
哦,那我想实现自己的来电界面,不用系统的来电界面 ,看来是不行了,我曾经用你所说的试了下,把来电界面窗体移走,但是并没有成功,设置静音的话,有时成功,有时失败,看来是不行了,实在没办法的话,只能用系统的来电了
panyunone 2007-12-10
  • 打赏
  • 举报
回复
哦,那我想实现自己的来电界面,不用系统的来电界面 ,看来是不行了,我曾经用你所说的试了下,把来电界面窗体移走,但是并没有成功,设置静音的话,有时成功,有时失败,看来是不行了,实在没办法的话,只能用系统的来电了
panyunone 2007-12-10
  • 打赏
  • 举报
回复
哦,那我想实现自己的来电界面,不用系统的来电界面 ,看来是不行了,我曾经用你所说的试了下,把来电界面窗体移走,但是并没有成功,设置静音的话,有时成功,有时失败,看来是不行了,实在没办法的话,只能用系统的来电了
载舟之水 2007-12-10
  • 打赏
  • 举报
回复
没有的,只有改RIL才可以。
panyunone 2007-12-10
  • 打赏
  • 举报
回复
有没有办法设置参数之类的来设置不让这几个消息进行广播呢,或者在进行广播之前屏蔽掉,只让我程序收到并处理,有办法么??????
加载更多回复(1)

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧