Windows Mobile 里面调用MMS的问题

MMS一直是第三方的产品,微软并没有官方的调用方式,所以这个问题一直困扰我这个需要调用了人, 昨天做了些调研。 现在汇总一下, 看看是不是管用。

最初的想法是调用tmail, 加入命令行参数。
试了一下
string sms = "-transport /"SMS/" -to /"13918834065/" -body /"simple SMS body/"";
CreateProcess("tmail.exe", sms, IntPtr.Zero, IntPtr.Zero, 0, 0, IntPtr.Zero, IntPtr.Zero, new Byte[128], pi);
这 里的SMS是可以工作的,但是换作MMS的时候就不罩了,只是打开了信息这个应用程序(就是运行了tmail,然后忽略了后面的参数) 是什么原因以我有限的智慧难以捉摸啊。看到有些人用的参数不是"-transport"而是"-service"不知道什么原因 我这里是不工作的。

所以只能走其他路了, 看到很多人写的MMS Composer的攻关之路我觉得太复杂, 搞不懂, 就找个简单的来弄。MailComposeMessage, 就是这个cemapi里面的接口据说也行就试试看。
这个函数的接口是一个叫MAILCOMPOSEFIELDS的struct的指针,但是里面的具体参数值MSDN的提示和没有提示没有任何区别,求爷爷告奶奶找到了些线索。
pmcf.pszAccount = _T("SMS");
// for MMS
pmcf.pszMsgClass = _T("IPM.MMS");
// for SMS
pmcf.pszMsgClass = _T("IPM.SMStext");
这个pszAccount和pszMsgClass是必须的,这个值从什么地方来呢?就是注册表里面来
HKEY_LOCAL_MACHINE/Software/Microsoft/Inbox/Svc下面有很多的服务, 我用的手机(HTC S1)下面我们看到了SMS而没有MMS, 所以这个MMS就只能通过SMS账户来发了。然后在SMS的MsgClasses
下面我们找到了一个项IPM.MMS, 值为1, 所以我们认定这个pszMsgClass的名字就是它了。同时还有一个IPM.SMStext,当然SMS的话用它就搞定了。
但是, 这个有个但是, 不是所有的手机都是这样设置的,看了D600就不是这样, 它在HKEY_LOCAL_MACHINE/Software/Microsoft/Inbox/Svc下面有MMS1, 那自然我们就需要写
pmcf.pszAccount = _T("MMS1");啦,所以general的做法读注册表项, 有mms1就用他, 没有就看sms, 找sms里面的msgClass就差不多了。至少在S1上现在还是跑的挺欢的。慢慢更新如果能找到更多手机的话

你可能感兴趣的:(windows,工作,struct,mobile,手机,sms)