新型Pocket PC电话版已将Pocket PC所具备的全部精妙特性同最新电话功能集于一身,我们该到淘汰老式手机的时候了。 国产联想 ET180, dopod 696,dopod 686 等,都是 Pocket PC Phone中的精品,且 ET180中关村售价己经降至 ¥3700元! 看到大家在破8850等机器上折腾AT指令集编写短信收发程序,我感到万分难过。 有这么好用的 Pocket PC Phone,为什么还要用AT指令集的破玩意儿呢? 采用AT指令集编写短信收发程序,需要解决许多技术难题和非计算难题,能折腾你好一阵子,我们就不说了。加上一些不法商贩老是在网上倒腾些控件在兜售,我无法忍受了! 这里我提供了另外一种途径发送中文短信,并给出全部源码,供大家下载。 ET180 PPC机和多普达手机中,含有强大的WINCE操作系统,可以使用WINCE操作系统的开发工具开发出一个简单的短信发送程序。 环境: 联想et180机器,操作系统Pocket 2002, 开发工具为eVB3.0 源代码: 1、创建一个Modules: SMSMessage 源码如下: Option Explicit ' API declarations Public Declare Function SmsOpen Lib "SMS" (ByVal ptsMessageProtocol As String, ByVal dwMessageModes As Long, ByRef psmshHandle As Long, ByRef phMessageAvailableEvent As Long) As Long Public Declare Function SmsSendMessage Lib "SMS" (ByVal smshHandle As Long, ByVal psmsaSMSCAddress As Long, ByVal psmsaDestinationAddress As String, ByVal pstValidityPeriod As Long, ByVal pbData As String, ByVal dwDataSize As Long, ByVal pbProviderSpecificData As String, ByVal dwProviderSpecificDataSize As Long, ByVal smsdeDataEncoding As Long, ByVal dwOptions As Long, ByRef psmsmidMessageID As Long) As Long Public Declare Function SmsClose Lib "SMS" (ByVal smshHandle As Long) As Long ' API constants Public Const SMS_MSGTYPE_TEXT = "Microsoft Text SMS Protocol" Public Const SMS_MODE_SEND = 2 ' Open in send mode Public Const SMSDE_GSM = 0 ' Use Unicode GSM encoding Public Const SMSAT_INTERNATIONAL = 1 ' International number format Public Const PS_MESSAGE_OPTION_NONE = 1 ' message options Public Const PS_MESSAGE_CLASS0 = 0 ' Send immediately Public Const PSRO_NONE = 0 ' No replacements Public Const SMS_OPTION_DELIVERY_NONE = 0 ' No delivery options Public Sub SendSMS(ByVal Number As String, ByVal Message As String) Dim SMSHandle As Long Dim SMSEvent As Long Dim SMSAddress As String Dim SMSProvider As String ' Open SMS Messaging Component If 0 <> SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, SMSHandle, SMSEvent) Then MsgBox "Could not open SMS component!", _ vbCritical, App.Title Exit Sub End If ' Set Address structure (UDT as string) SMSAddress = LongToBytes(SMSAT_INTERNATIONAL) & Number ' Set Provider structure (UDT as string) SMSProvider = LongToBytes(PS_MESSAGE_OPTION_NONE) & _ LongToBytes(PS_MESSAGE_CLASS0) & _ LongToBytes(PSRO_NONE) ' Send message If 0 = SmsSendMessage(SMSHandle, 0, SMSAddress, 0, Message, LenB(Message), _ SMSProvider, 12, SMSDE_GSM, SMS_OPTION_DELIVERY_NONE, 0) Then 'MsgBox "Message sent!", vbInformation, App.Title MsgBox "短信息发送成功!", vbInformation, App.Title Else 'MsgBox "Could not send message!", vbCritical, App.Title MsgBox "短信息发送失败!", vbCritical, App.Title End If ' Close SMS Messaging Component If 0 <> SmsClose(SMSHandle) Then 'MsgBox "Could not close SMS component!", vbCritical, App.Title MsgBox "无法关闭短信息组件!", vbCritical, App.Title Exit Sub End If End Sub Function LongToBytes(ByVal Value As Long) As String Dim lsHex As String, i As Integer lsHex = Right("00000000" & Hex(Value), 8) For i = 1 To 7 Step 2 LongToBytes = ChrB(CInt("&H" & Mid(lsHex, i, 2))) & LongToBytes Next End Function Function BytesToLong(ByVal Value As String) As Long Dim lsHex As String, i As Integer For i = 1 To 4 lsHex = Hex(AscB(MidB(Value, i, 1))) & lsHex Next BytesToLong = CLng("&H" & lsHex) End Function 2、创建一个窗体,frmSMS 包含两个文本框,一个按钮,源码如下: Private Sub Command1_Click() SendSMS txtNumber.Text, txtMessage.Text End Sub 大家可以用winSock编写一个小程序,实现PPC和PC之间的通讯,达到把et180机器作为短信中心的目的,实现如办公自动化系统之类的应用软件 手机短信收发功能。 大家如有技术发面的意见建议,请到MSN(mr_hsx@hotmail.com ,Seala@126.com)上联系。
|