先闲聊几句,说说这文章和文章里的代码是为何而产生的。小弟今年9月6日就要正式开始我的大学生活。我也算上是个短信达人,上大学的话短信费估计就更疯狂了,所以就考虑用包月的GPRS发送短信。虽然网络上已经有不少这类的软件,如飞信和做做客吧。然而这些软件都存在不太符合我个人期望的问题,比如信息记录在不同的地方以后翻查管理不方便;而做做客这类非通信营运商提供的软件,信息安全没保障,一会儿没准闹出个“艳信门”(当然,我也没那个艳福~),那我岂不是完蛋了。
但是对于如何拦截准备发送的短信,我就没办法了。网上虽然很多关于“拦截短信”这一主题的文章,然而讨论的都是拦截接收到的短信(用于过滤垃圾短信等),至今我似乎还没有看到讨论拦截准备发送的短信的文章(也许这是因为我这样的需求比较罕见吧)。我尝试通过在MAPI中注册Folder和Message类的事件,等待系统发来通知时,就把发件箱、草稿箱的短信删除 —— 可是这样并没有作用,短信还是会发送出去。
(虽然是C++ Native的代码,不过大家把它封装一下就可以在.net里面用了)
-
为了让代码显得更清晰,使大家能把注意力集中在关键的属性设置上,我把对HRESULT的判断去掉。
-
CEMPAI对于SPropValue是比较敏感的,所以一定要调用ZeroMemory
-
对于收件箱内的短信,虽然读取时可以得到PR_DISPLAY_NAME这个属性,然而在CreateMessage后似乎设置该字段并不能起效果,要让发送者的姓名显示出来,可以使用一个小技巧,在PR_EMAIL_ADRESS属性值中使用FullAdress格式,即 /"姓名" <号码>/ (不包括斜杠"/")
-
CEMAPI对于属性设置的顺序似乎也是敏感的,好比对于已发送的短信(包括需要真正发送出去的短信),都需要先设置发送目标(即Recipient),然后才能设置其他属性
最后 ,希望哪位做WM开发的高手能指点一二,告诉我怎样能够拦截用户通过原始方法发送出去的短信(就是不让短信发送出去,而被程序拦截并且销毁)的方法,谢谢!Windows Mobile的SDK文档还不够丰富,起码很多东西在MSDN就根本搜索不到,所以大家有什么问题也不妨提出,让我们一起交流交流。呵呵。
如果你用.net cf的话,用MessageInterceptor(好像是这样拼吧,我手机回复的),设置Action为NotifyAndDelete,然后自己把信息写进收件箱——这是我当前想到的办法。估计还有更好的办法,好比可以通过修改注册表之类的,可是我一直没找到。如果你找到的话也不妨告诉我一下,谢谢。
U2U: 哈哈,解决了!修改注册表,把自带的号码分析弄坏了就可以不让他发送出去了。。。
--------------------------------------------------------
楼主,我想知道,你是怎么弄坏的呀,要改动什么地方,谢谢。
我最近在考试,代码不在这台电脑上。你去看Windows Mobile 6.0 SDK帮助文档,里面有。