请问如何获取电话状态

Aeolia_Tao 2008-09-27 06:58:41
请问如何获取电话状态,如来电 ,通话中,有未接来电,正常等
有什么事件来捕获吗还是通过注册表能检视到如HKEY_LOCAL_MACHINE\System\State\Phone\status但不知道获取的数值怎么用
谢谢
...全文
765 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ColaCoding 2011-11-27
  • 打赏
  • 举报
回复
留个脚印!
phpdocf 2009-12-14
  • 打赏
  • 举报
回复
不知道是不是我想要的,先顶一下
etryrytuyuyu 2009-06-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jinhaijian 的回复:]
监视注册表的方法

#include <regext.h>
#include "snapi.h"
const TCHAR c_szPhoneRegistryRootkey[] = TEXT("System\\State");
const TCHAR c_szPhoneRegistrySubkey[] = TEXT("Phone");
const TCHAR c_szPhoneSignalStrength[] = TEXT("Signal Strength");
const TCHAR c_szPhoneIncomingCallerNumber[] = TEXT("Incoming Caller Number");
const TCHAR c_szPhoneStatus[] = TEXT…
[/Quote]
zxjl0214 2008-09-28
  • 打赏
  • 举报
回复
SN_PHONECALLTALKING_BITMASK 通话中
SN_PHONEMISSEDCALL_BITMASK 有未接来电
SN_PHONEINCOMINGCALL_BITMASK 来电
SN_PHONEROAMING_BITMASK 漫游
SN_PHONERADIOOFF_BITMASK //the phone's radio is turned off.(比方说飞行模式)

正常是指啥?
有什么不懂的可以看snapi.h里面的注释
jinhaijian 2008-09-28
  • 打赏
  • 举报
回复
监视注册表的方法

#include <regext.h>
#include "snapi.h"
const TCHAR c_szPhoneRegistryRootkey[] = TEXT("System\\State");
const TCHAR c_szPhoneRegistrySubkey[] = TEXT("Phone");
const TCHAR c_szPhoneSignalStrength[] = TEXT("Signal Strength");
const TCHAR c_szPhoneIncomingCallerNumber[] = TEXT("Incoming Caller Number");
const TCHAR c_szPhoneStatus[] = TEXT("Status");
#define MAX_NOTIF 3
enum NotifType
{
SignalStrength = 0,
IncomingCallerNumber,
PhoneRoaming
};
HREGNOTIFY g_hRegNotify[ MAX_NOTIF ] ;
// The call-back function for Registry Notifications.
void RegistryNotifyCallbackFunc(HREGNOTIFY hNotify, DWORD dwUserData, const PBYTE pData, const UINT cbData)
{
TCHAR szOutput[MAX_PATH];
// Identify the Notification received, based upon the User Data passed in, while registering for the notification.
switch( dwUserData )
{
case SignalStrength:
StringCchPrintf(szOutput, MAX_PATH, _T("The Signal Strength is %d"), (DWORD) *pData);
break;
case IncomingCallerNumber:
StringCchPrintf(szOutput, MAX_PATH, _T("The Incoming Caller Number is %s"), (TCHAR*)pData);
break;
case PhoneRoaming:
{
DWORD dw = 0;
// Copy the data sent to us into a local buffer.
memcpy(&dw, pData, cbData);
// Find out if the roaming status has been set by logically ANDing the data with the value 512 (the bitmask for roaming).
StringCchPrintf(szOutput, MAX_PATH, _T("The Roam Status of the Phone is %s"), ( dw & SN_PHONEROAMING_BITMASK ) == SN_PHONEROAMING_BITMASK ? _T("TRUE") : _T("FALSE") );
}
break;
default :
break;
}
OutputDebugString( szOutput );
return;
}
void RegisterForPhoneNotifications()
{
HKEY hKey;
// Let us open the registry to get a handle to the Phone Registry key.
if (S_OK == RegOpenKeyEx(HKEY_LOCAL_MACHINE, c_szPhoneRegistryRootkey, 0, KEY_QUERY_VALUE, &hKey))
{
// Since we are registering for multiple notifications, let's pass some unique User Data for each notification ( 5th param ),
// which will help us identify the notification in the Call Back.
// Let us register for Signal strength notifications.
HRESULT hr = RegistryNotifyCallback(hKey,
c_szPhoneRegistrySubkey,
c_szPhoneSignalStrength,
RegistryNotifyCallbackFunc,
SignalStrength,
NULL,
&g_hRegNotify[ SignalStrength ] );

// Let us register for Incoming Caller Number notifications.
hr = RegistryNotifyCallback(hKey,
c_szPhoneRegistrySubkey,
c_szPhoneIncomingCallerNumber,
RegistryNotifyCallbackFunc,
IncomingCallerNumber,
NULL,
&g_hRegNotify [ IncomingCallerNumber ] );
// Let us register for Roaming status change notifications.
hr = RegistryNotifyCallback(hKey,
c_szPhoneRegistrySubkey,
c_szPhoneStatus,
RegistryNotifyCallbackFunc,
PhoneRoaming,
NULL,
&g_hRegNotify [ PhoneRoaming ] );
RegCloseKey(hKey);

}
}
void CloseAllNotifications ()
{
for (int i = 0; i < MAX_NOTIF; i++)
{
RegistryCloseNotification(g_hRegNotify[i]);
}
}
Aeolia_Tao 2008-09-28
  • 打赏
  • 举报
回复
谢谢大家
const TCHAR c_szPhoneRegistryRootkey[] = TEXT("System\\State");
const TCHAR c_szPhoneRegistrySubkey[] = TEXT("Phone");
const TCHAR c_szPhoneSignalStrength[] = TEXT("Signal Strength"); //信号强度
const TCHAR c_szPhoneIncomingCallerNumber[] = TEXT("Incoming Caller Number"); //来电号码
const TCHAR c_szPhoneStatus[] = TEXT("Status"); //这个status的值该怎么比较呢


掩码参考:http://blog.csdn.net/genezhangbin/archive/2007/02/27/1515751.aspx
我想问这些掩码怎么用
哪些是表示 来电 ,通话中,有未接来电,正常这四种状态?
我用与操作,因为不知道具体对应哪个掩码,还请熟悉的人指点下


zxjl0214 2008-09-28
  • 打赏
  • 举报
回复
Sorry,上面的代码贴错了。

case UM_PHONESTATE_NOTIFY:
RegistryGetDWORD(SN_PHONERADIOPRESENT_ROOT,
SN_PHONERADIOPRESENT_PATH,
SN_PHONERADIOPRESENT_VALUE,
&dwStatus);
北方大冬瓜 2008-09-28
  • 打赏
  • 举报
回复
使用 TAPI 函数的 Notify
zxjl0214 2008-09-28
  • 打赏
  • 举报
回复
这三个都可以,就看你想怎么notify了:
RegistryNotifyApp
RegistryNotifyCallback
RegistryNotifyWindow

Sample:


#include <snapi.h>
#define UM_PHONESTATE_NOTIFY WM_USER+1000
HREGNOTIFY hNotify = NULL;

LRESULT RegistryNotifyWindowProc(HWND hDlg, UINT msg, UINT wParam, LONG lParam)
{
LRESULT lRet = FALSE;
DWORD dwStatus;

switch (msg)
{
case WM_CREATE:
RegistryNotifyWindow(SN_PHONERADIOPRESENT_ROOT,
SN_PHONERADIOPRESENT_PATH,
SN_PHONERADIOPRESENT_VALUE,
hDlg,
UM_PHONESTATE_NOTIFY,
0,
NULL,
&hNotify);
lRet = 0;
break;
case UM_PHONESTATE_NOTIFY:
// You can read the full location with the RegistryGetString function.
RegistryGetString(SN_PHONERADIOPRESENT_ROOT,
SN_PHONERADIOPRESENT_PATH,
SN_PHONERADIOPRESENT_VALUE,
&dwStatus);
// Add your own processing statements here.
if (dwStatus && SN_PHONERADIOPRESENT_BITMASK)
{

}
else if (dwStatus && SN_PHONERADIOOFF_BITMASK)
{
}
lRet = TRUE;
break;
case WM_DESTROY:
RegistryCloseNotification(hNotify);
lRet = 0;
break;
// Add your own statements for handling other messages, here.

return lRet;
}
guguqiaqia 2008-09-28
  • 打赏
  • 举报
回复
去参考wm 6 sdk 下面的那个RAPI sample

netlcx 2008-09-28
  • 打赏
  • 举报
回复
支持楼上。
zxjl0214 2008-09-28
  • 打赏
  • 举报
回复
上面我的代码有点问题,修正一下

#include <snapi.h>
#include <regext.h>
#define UM_PHONESTATE_NOTIFY WM_USER+1000
HREGNOTIFY hNotify = NULL;

LRESULT RegistryNotifyWindowProc(HWND hDlg, UINT msg, UINT wParam, LONG lParam)
{
LRESULT lRet = FALSE;
DWORD dwStatus;

switch (msg)
{
case WM_CREATE:
RegistryNotifyWindow(SN_PHONERADIOPRESENT_ROOT,
SN_PHONERADIOPRESENT_PATH,
SN_PHONERADIOPRESENT_VALUE,
hDlg,
UM_PHONESTATE_NOTIFY,
0,
NULL,
&hNotify);
lRet = 0;
break;
case UM_PHONESTATE_NOTIFY:
RegistryGetDWORD(SN_PHONERADIOPRESENT_ROOT,
SN_PHONERADIOPRESENT_PATH,
SN_PHONERADIOPRESENT_VALUE,
&dwStatus);

// Add your own processing statements here.
if (dwStatus & SN_PHONEMISSEDCALL_BITMASK)
{
//有未接电话
}
else if (dwStatus & SN_PHONEINCOMINGCALL_BITMASK)
{
//有来电
}
else if (dwStatus & SN_PHONECALLTALKING_BITMASK)
{
//正在通话中
}
else
{
//其它
}
lRet = TRUE;
break;
case WM_DESTROY:
RegistryCloseNotification(hNotify);
lRet = 0;
break;
// Add your own statements for handling other messages, here.

return lRet;
}

7,655

社区成员

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

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