首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Windows Mobile >

PPC拦截短信解决方案

2012-01-16 
PPC拦截短信用的mapirule的那个例程我在mapirule里面加了好多的messagebox来跟踪它的运行自己写了个程序依

PPC拦截短信
用的mapirule的那个例程
我在mapirule里面加了好多的messagebox来跟踪它的运行
自己写了个程序依次调用
  ~DllRegisterServer
  ~CaptureSMSMessages
  然后在一个线程中while(true)的调用
  ~SMSMessageAvailable,(这里就是等待ProcessMessage函数把得到的短信内容写到内存映射文件中然后再取出来),如果SMSMessageAvailable成功返回了,捕获短信也就成功了
  ~TerminateSMSMessagePassing
  ~DllUnregisterServer

我短信捕获仅成功了一次,太奇怪了!偶尔的这一次也是ProcessMessage函数唯一运行的一次,因为在其他无数次的试验中,我放在ProcesMessage函数中的messagebox都没有弹出来

现在有几个流程不清楚:
1.   mapirule我是copy到ppc的windows下的,它在什么时候开始注册?是我的程序中调用DllRegisterServer()的时候吗?还是它附加到tmail上的时候就开始注册了?
2.   mapirule是我的程序还是tmail.exe调用的?如果是tmail调用,是不是我在调试mapirule的时候把它附加到tmail进程就可以了呢?我这样试过了,可是还是没成功。
3.   mapirule在被我的程序调用前,还有那些需要先处理的?因为偶尔成功了一次,所以我怀疑是在对mapirule怎么调用的理解上有问题

请大家指点!




[解决办法]
在安装mapirule.dll之前没有接收到任何SMS消息,应用程序就会正常运行。但是,如果在运行该应用程序之前,在设备上已经接收到SMS消息,那么在对设备进行软重置前,mapirule客户端将不会捕获SMS消息。

http://www.microsoft.com/china/msdn/library/langtool/vsdotnet/ReceivSMSMessages.mspx?mfr=true
建议你这样测试:
1:把手机里的SMS都删除;
2:写个注册程序先注册mapirule,只调用DllRegisterServer;重起机子。(目的是让tmail确实调用了mapirule).
3: 再运行你自己的程序,这时不要再DllRegisterServer了

不行就多重起机子。
[解决办法]
如果mapirule工作正常。那么ProcessMessage是每收一次短信都会调用的。没有成功的时候那肯定是mapirule不work.

我上次也碰到这种不稳定的状况。后来改变了程序结构。这个问题就好多了。比如采用多线程。

还有我发现。在手机与电脑相连的时候这些问题基本不存在。
[解决办法]
1.每次调试的时候要确保tmail.exe是关闭的,应为一旦你的mapirule.dll被加载,会跟tmail.exe有一样的生命周期,只有tmail.exe被关闭时,才被卸载。
2.你自己写了个程序去调用DllRegisterServer,其实没有任何作用,你的mapirule.dll要么已经被加载,要么没有被加载。DllRegisterServer,只是在注册表里写了一些加载的信息而已。
3.DllRegisterServer和DllUnRegisterServer,一般只是用于安装和卸载程序的时候用到。
在inf文件中有[DefaultInstall]下有CESelfRegister这项,如果你指定了CESelfRegister,则在安装的时候会自动调用DllRegisterServer,卸载时调用DllUnRegisterServer。
4.至于 “ProcessMessage函数唯一运行的一次”,应该是你的mapirule.dll的函数有问题。

热点排行