windows mobile 电话过滤
2010年5月20日
2 条评论
最近看了下windows mobile上电话过滤的开发,网上的代码都是c#的,没有找到c++的,就把代码移植到了c++上,废话不多说,直接上代码。
#include <regext.h>
#include "snapi.h"
#include "Tlhelp32.h"
const TCHAR c_szPhoneRegistryRootkey[] = TEXT("System\\State");
const TCHAR c_szPhoneRegistrySubkey[] = TEXT("Phone");
const TCHAR c_szPhoneIncomingCallerNumber[] = TEXT("Incoming Caller Number");
HREGNOTIFY g_hRegNotify ;
// The call-back function for Registry Notifications.
void RegistryNotifyCallbackFunc(HREGNOTIFY hNotify, DWORD dwUserData, const PBYTE pData, const UINT cbData)
{
if(pData != NULL && 0 == _tcscmp((TCHAR*)pData, TEXT("12345678965")))//后边这个是要拒绝的电话
{
keybd_event(0x73, 0, 0, 0);
keybd_event(0x73, 0, 0x0002, 0);
}
return;
}
void RegisterForPhoneNotifications()
{
HKEY hKey;
if (S_OK == RegOpenKeyEx(HKEY_LOCAL_MACHINE, c_szPhoneRegistryRootkey, 0, KEY_QUERY_VALUE, &hKey))
{
//下边是注册注册表修改回调函数
HRESULT hr = RegistryNotifyCallback(hKey,
c_szPhoneRegistrySubkey,
c_szPhoneIncomingCallerNumber,
RegistryNotifyCallbackFunc,
1,
NULL,
&g_hRegNotify );
RegCloseKey(hKey);
}
}
void wmain()
{
RegisterForPhoneNotifications();
Sleep(1000000);
}
原理是这样的:监控注册表的某项值,上边有来电的号码,然后如果不想接听的话那么就模拟发送键盘码。
但是这样的问题是还会在手机上的未接来电表中留下记录,把那个记录删除就行了。删除的方法就是删除pim.vol中的clog.db。

