在Windows Mobile 6上通过CEMAPI POOM发送短信
在Winodws Mobile上第三方软件一般是通过
1)调用SmsMessageSend API函数发送短信。
或者通过
2)CreateProcess或者ShellExecuteEx方式,调用命令(不含尖括号)
</windows/tmail.exe -service "SMS" -to "短信接收方号码" -body "短信内容">
下面的例子,就是调用Windows Mobile自带的短信程序(tmail.exe),编辑一条收件人为10086,短信内容为 CXYE,查询余额的短信。
/windows/tmail.exe -service "SMS" -to "10086" -body "KTIP1000"
最终效果如截图。
<Place Holder for SMS Send UI>
1)和2)这两种方法都有各自的优缺点。
第一种方法,短信发送成功后在微软自带的已发送邮件箱(Sent Items)中找不到已经发送的短信。发送失败也没有提示。当然可以自己硬行构造POOM的短信对象来实现这个不足。
第二种方法,就是通过tmail.exe -service "SMS" -to "" -body "" 的方法不能够自动发送短信,只是停留在编辑完成界面,还需要用户手动点击"发送"按钮,或者通过程序实现。
下面介绍一种方法既能够让已发短信出现在已发送邮件箱中,也能够将短信编辑完成后自动发送。
这就是通过CEMAPI来发送短信。这个在www.codeproject.com 上05年的一篇文章已经实现了。请原文请参考 http://www.codeproject.com/KB/mobile/SMS_CEMPI.aspx .
我使用和实践了这段代码,发现几个问题。
1)发送短信不成功后,短信会到草稿箱,但是点开改短信,再次发送时,就无法发送了。
<Place Holder for Screen shot>
此时,短信的内容放置到了主题(Subject)上,这和普通使用时候遇到的情况不一样,短信内容应该在正文(Body)中.
2)短信发送时候,需要设置一个参数,那就是本机号码。至于如何获得本机号码,是非常麻烦的。
3)此Sample是在EVC下编译的,而且缺少.rc2文件。虽然作者已经说明了如何解决。
但是我还是重新改写了以下,将所有的CComPtr<IMAPISession> 之类的定义改成了WM6上建议的IMAPISession
改正了 SendSMSMessage 函数的HRESULT 类型返回值 Return S_OK.
但是1)和2)的问题仍旧需要解决。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cjwn/archive/2009/02/08/3868466.aspx