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的函数有问题。