求救:在程序中拨号时呼叫信息的获取问题

lusui666 2009-05-17 10:38:33
我的开发环境是VC2005.net+Windows mobile 5.0SDK,PDA是多普达S1,在程序中拨打电话,通过回调函数CALLBACK lineCallback(DWORD hDevice, DWORD dwMsg,DWORD dwCallbackInstance, DWORD dwParam1,DWORD dwParam2, DWORD dwParam3)的dwMsg可以得到LINE_CALLSTATE的LINECALLSTATE_DIALING,以及LINECALLSTATE_PROCEEDING消息,但是一旦开始呼叫之后就不能得到LINECALLSTATE_RINGBACK、LINECALLSTATE_CONNECTED、LINECALLSTATE_BUSY等消息,一旦挂断也可以得到LINECALLSTATE_DISCONNECTED、LINECALLSTATE_IDLE消息,不知道为什么?迫切盼望高手指点,不胜感激!!!
...全文
103 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lusui666 2009-05-21
  • 打赏
  • 举报
回复
看来这个问题是没有希望解决了,我今天又试了一下,发现LINECALLSTATE_CONNECTED也可以检测到,但是LINECALLSTATE_BUSY和LINECALLSTATE_RINGBACK却始终不能得到,明天更换PDA再试试。
lusui666 2009-05-19
  • 打赏
  • 举报
回复
非常感谢!是在LINE_CALLINFO里面得到LINECALLSTATE_RINGBACK吗,好像是在LINE_CALLSTATE里面的吧?另外如果换个函数,用什么函数可以得到这个消息?
leiounasi 2009-05-18
  • 打赏
  • 举报
回复
我写过一个电话防火墙~其中有你说的功能。我把这段源码贴给你,你看下~


VOID CALLBACK LineCallback(DWORD hDevice, DWORD dwMsg, DWORD dwCallbackInstance, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3)
{
switch(dwMsg)
{
case LINE_CALLINFO:
{
switch(dwParam1)
{
case LINECALLINFOSTATE_CALLERID:
{
//szPhoneNumber ---- 呼入的电话号码
}
case LINECALLINFOSTATE_CONNECTEDID :
{
LINECALLINFO *lpCallInfo;
lpCallInfo = (LINECALLINFO *)malloc(sizeof(LINECALLINFO)+1000);
memset(lpCallInfo, 0, sizeof(LINECALLINFO)+1000);
lpCallInfo->dwTotalSize = sizeof(LINECALLINFO)+1000;
while (1)
{
lineGetCallInfo( (HCALL)hDevice, lpCallInfo);
if (lpCallInfo->dwTotalSize < lpCallInfo->dwNeededSize)
lpCallInfo = (LINECALLINFO *)realloc(lpCallInfo,lpCallInfo->dwNeededSize);
else break;
}
TCHAR szPhoneNumber[30];
lstrcpy(szPhoneNumber,(LPTSTR)((LPSTR)((DWORD)lpCallInfo+(DWORD)lpCallInfo->dwCalledIDOffset)));
//lstrcpy(szPhoneNumber,(LPTSTR)((LPSTR)((DWORD)lpCallInfo+(DWORD)lpCallInfo->dwConnectedIDOffset)));
// szPhoneNumber ---- 拨出的电话号码
free(lpCallInfo);
UINT nStrULength=WideCharToMultiByte(CP_ACP,0,szPhoneNumber,-1,NULL,NULL,NULL,NULL);
LPSTR lpStr;
lpStr = (char*)malloc(nStrULength);
WideCharToMultiByte(CP_ACP,0,szPhoneNumber,-1,lpStr,nStrULength,NULL,NULL);
LPSTR lpStr2;
lpStr2 = (char*)malloc(12);
lpStr2 = "要特殊对待的电话号码";
if(strcmp(lpStr,lpStr2)==0)
{
keybd_event(VK_F4,0,0,0);
keybd_event(VK_F4,0,KEYEVENTF_KEYUP,0);
}
break;
}
}
}
break;
}
}
ppc_2008 2009-05-18
  • 打赏
  • 举报
回复
楼主不妨换个函数,实现这个功能.
Roy_ly 2009-05-18
  • 打赏
  • 举报
回复
这个是与手机有关系的,有可能是RIL层相关的流驱动接口没有实现,建议先换一台机器试试。
lusui666 2009-05-18
  • 打赏
  • 举报
回复
其实我最希望可以得到LINECALLSTATE_RINGBACK消息,我发现以前也有人提出过这个问题,但是基本上都没有人回复,不知道是API函数不能实现该功能,还是这个消息与基站有关,抑或是与手机有关系?盼高人答疑解惑。
世外涛缘 2009-05-17
  • 打赏
  • 举报
回复
帮楼主顶了,关注。

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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