📄 谁有手机发送短信源代码-activex 控件-delphi.htm
字号:
href="http://langchaosoft.com.cn/delphi/activex/data3032250.html">Visual
Graph在可视化工...</A>
<LI><A title=如何开发ACTIVEX应用程序
href="http://langchaosoft.com.cn/delphi/activex/data3032710.html">如何开发ACTIVEX应用程序</A>
<LI><A title="谁能告诉我?这个问题困扰我很久很久了 关于mscomm"
href="http://langchaosoft.com.cn/delphi/activex/data3033303.html">谁能告诉我?这个问题困扰我很久很久...</A>
<LI><A title=这样的一个dll应该如何写?
href="http://langchaosoft.com.cn/delphi/activex/data3036119.html">这样的一个dll应该如何写?</A>
<LI><A title=在VC++中,做一个DLL,其中用到一个ActiveX控件,要怎么办?
href="http://langchaosoft.com.cn/delphi/activex/data3036365.html">在VC++中,做一个DLL,其中用...</A>
</LI></UL></DIV>
<DIV id=hcc>本站特约赞助:</DIV>
<DIV class=box>
<UL>
<DIV align=center><!--right_ads_begin-->
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-2922075356939851";
google_ad_width = 200;
google_ad_height = 200;
google_ad_format = "200x200_as";
google_ad_type = "text";
google_ad_channel = "";
google_color_border = "FFFFFF";
google_color_bg = "EFEFEF";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "E6E6E6";
//--></SCRIPT>
<SCRIPT src="谁有手机发送短信源代码-ActiveX 控件-Delphi.files/show_ads.js"
type=text/javascript>
</SCRIPT>
<BR><!--right_ads_end--></DIV>
<SCRIPT src="谁有手机发送短信源代码-ActiveX 控件-Delphi.files/right_ad.js"></SCRIPT>
</UL></DIV></DIV>
<DIV id=leftside>
<DIV id=hcc>谁有手机发送短信源代码?</DIV><BR><!--content_ads_begin-->
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-2922075356939851";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text";
google_ad_channel = "";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "E6E6E6";
//--></SCRIPT>
<SCRIPT src="谁有手机发送短信源代码-ActiveX 控件-Delphi.files/show_ads.js"
type=text/javascript>
</SCRIPT>
<BR><!--content_ads_end-->谁有手机发送短信源代码?
<HR>
手机短信息SMS开发—编码,解码<BR><BR>1、 英文编码<BR>缺省的GSM字符集为7位编码,ASCII码为8位编码,编码就是将8位ASCII编码转换为7位编码。<BR>例如:1234 编码后得到31D98C06<BR>2进制表示<BR>8位编码 00110001 00110010 00110011 00110100<BR>7位编码 00110001 11011001 10001100 00000110 <BR>通过例子可以看出,将ascii8位编码的Bit8去掉,依次将下7位编码的后几位逐次移到前面,形成新的8位编码。<BR>以下是C++Builder的实现代码:<BR>String __stdcall EncodeEnglish(String InputStr)<BR>{<BR> int n,len,cur;<BR> String tempstr,returnstr;<BR> unsigned char mid1[2],mid2[2];<BR> len=InputStr.Length();<BR> n=0;<BR> for(int i=1;i<=len;i++)<BR> {<BR> if (i<len)<BR> {<BR> strcpy(mid1,InputStr.SubString(i,1).c_str());<BR> strcpy(mid2,InputStr.SubString(i+1,1).c_str());<BR> cur=(mid1[0]>>n)|((mid2[0]<<(7-n))& 0xff);<BR> }<BR> else<BR> {<BR> strcpy(mid1,InputStr.SubString(i,1).c_str());<BR> cur=(mid1[0]>>n)& 0x7f;<BR> }<BR> FmtStr(tempstr,"%2.2X",ARRAYOFCONST((cur)));<BR> returnstr=returnstr+tempstr;<BR> n=(n+1)%7;<BR> if (n==0)<BR> i++;<BR>
}<BR>return returnstr;<BR>}<BR>2、 英文解码<BR>简单地说就是将7位字符编码转换为8为字符编码<BR>以下是C++Builder的实现代码:<BR>int ReturnHex(int Value)<BR>{<BR> switch (Value)<BR> {<BR> case 0:<BR> Value=0x7f;<BR> break;<BR> case 1:<BR> Value=0x3f;<BR> break;<BR> case 2:<BR> Value=0x1f;<BR> break;<BR> case 3:<BR> Value=0x0f;<BR> break;<BR> case 4:<BR> Value=0x07;<BR> break;<BR> case 5:<BR> Value=0x03;<BR> break;<BR> case 6:<BR> Value=0x01;<BR> break;<BR> case 7:<BR> Value=0x00;<BR> break;<BR> }<BR> return Value;<BR>}<BR>String __stdcall DecodeEnglish (String InputStr)<BR>{<BR> unsigned char InStr[300];<BR> char OutStr[300];<BR> String str;<BR> int j=0,i=0;<BR> int Point=0;<BR> int temp;<BR> memset(InStr,0,301);<BR> memset(OutStr,0,301);<BR> for(int i=0;i<InputStr.Length();i=i+2)<BR> {<BR> str="0x"+InputStr.SubString(i+1,2);<BR> InStr[i/2]=StrToInt(str);<BR> }<BR> while(j<=InputStr.Length()/2)<BR> {<BR> if(Point==0)<BR> OutStr[i]=InStr[j]&ReturnHex(Point);<BR> else<BR>OutStr[i]=((InStr[j]&ReturnHex(Point))<<Point)|(InStr[j-1]>>(8-Point));<BR> if(Point%7==0&&Point!=0)<BR> Point=0;<BR> else<BR> Point=Point+1;<BR> i++;<BR> j=i-(i/8);<BR> <BR> }<BR> OutStr[12]=((InStr[12]&0x07)<<5)|(InStr[11]>>(8-5));<BR> return AnsiString(OutStr);<BR>}<BR>3、 中文编码<BR>中文编码较为简单,就是将GB2312的中文编码转换为代码页为CP936的Unicode编码即可<BR>以下是C++Builder的实现代码<BR>String EncodeChinese(String InputStr)<BR>{<BR>
int cur;<BR>String tempstr,returnstr;<BR>WideString ws;<BR>wchar_t mid[2];<BR>ws=WideString(InputStr);<BR>for(int i=1;i<=ws.Length();i++)<BR>{<BR>wcscpy(mid,ws.SubString(i,1).c_bstr());<BR>cur=mid[0];<BR>FmtStr(tempstr,"%4.4X",ARRAYOFCONST((cur)));<BR>returnstr=returnstr+tempstr;<BR>}<BR>return returnstr;<BR>}<BR>4、 中文解码<BR>将代码页为CP936的Unicode编码转换为GB2312的中文编码即可<BR> <BR>以下是C++Builder的实现代码<BR>String DecodeChinese(String InputStr)<BR>{<BR> wchar_t Buf[300];<BR> for(int i=0;i<InputStr.Length();i=i+4)<BR> {<BR> Buf[i/4]=StrToInt("0x"+InputStr.SubString(i+1,4));<BR> }<BR> Buf[InputStr.Length()/4]=0;<BR> return WideCharToString(Buf);<BR>}
<HR>
SMS程式开发<BR>九十年代初,AT命令仅被用于modem操作。由于没有控制移动电话文本消息的先例,因此开发了一种叫SMS Block Mode的协议,通过终端设备(TE)或电脑来完全控制SMS。几年后,主要的移动电话生产厂商诺基亚、爱立信、摩托罗拉和HP共同为GSM研制了一整套AT命令,其中包含对SMS的控制。AT命令在此基础上演化并被加入GSM 07.05标准,以及之后的GSM 07.07标准。<BR><BR>对SMS的控制共有三种实现途径: <BR>• 最初的Block Mode; <BR>• 基于AT命令的Text Mode; <BR>• 基于AT命令的PDU Mode;<BR>到现在,PDU已取代Block Mode,后者逐渐淡出。<BR>什么是PDU Mode?<BR>它是发送或接收手机SMS消息的一种方法。消息正文经过十六进制编码后进行传送。<BR>PDU命令有哪些?<BR>基本的PDU命令是AT+CMGR,AT+CMGL,AT+CMGS。例如读取电话上全部未读过的SMS消息,最简单的办法是用AT+CMGL=0;而用AT+CMGL=4则可读取全部SMS消息,无论已读过与否。 <BR><BR>实例:<BR>15:38:58 TX:AT<BR>15:39:05 TX:AT+CPMS="ME"<BR>15:39:05 RX:AT+CPMS="ME"<BR>15:39:05 RX:<BR>+CPMS: 15,15,4,10,15,15<BR>15:39:05 RX:<BR>OK<BR><BR>15:39:07 TX:AT+CMGL=0<BR>15:39:07 RX:AT+CMGL=0<BR>15:39:07 RX:<BR>+CMGL: 5,0,,52 <BR><BR>15:39:07 <BR>RX:07914408020033F40407D0B1582C0600000030525183920028D43708<BR>2E7FD3CB633A888E2E83EE6F399B0C32CBDF6D10B96C0FCFE9617AFAED76B95C<BR>15:39:07 RX: <BR>OK<BR><BR>使用工具对上述收到的SMS进行解码后,可得到如下的解释: <BR>IEI: 00<BR>LENGTH: 00<BR>MESSAGE REF: 00<BR>STATUS: 00<BR>SC Address length: 07<BR>SC Address type: 91<BR>Type of number: International<BR>Numbering plan identifier: E.164<BR>SC Address: 44802000334<BR>Message Type Indicator: 04<BR>Message Type: SMS-DELIVER / SMS-DELIVER REPORT<BR>More Messages To Send: No<BR>Status Report Indication: No<BR>Reply Path: No<BR>Originating Address Length: 07<BR>Originating Address type: D0<BR>Type of number: Alphanumeric<BR>Numbering plan identifier: Unknown<BR>Originating Address: 1B85C260<BR>Decoded: 1111<BR>Protocol Identifier: Default<BR>Data Coding Scheme: GSM Default Alphabet<BR>SC Timestamp: 00305251839200<BR>decoded: 00/03/25 15:38:29<BR>Time Zone: GMT+0.00H<BR>User Data Length: 28<BR>decimal: 40<BR>Message: To protect the world from devastation<BR>于是我们知道这条SMS消息的第一部分是:<BR>07914408020033F4<BR>07是跟在服务中心地址内的字节数;<BR>91是TON/NPI。TON/NPI遵守International/E.164标准,指在号码前需加‘+’号;此外还可有其他数值,但91最常用到。<BR>44080200033F4是所使用的服务中心地址,由于位置上略有处理,实际号码应为:<BR>44802000334F(字母F意指长度减1),这就是服务中心的准确地址(号码)。<BR>下一单元是:<BR><BR>04<BR><BR>这是文件头字节(header byte, 是一种bitmask)。将每个字节设为1时,有如下含义:<BR><BR>10000000<BR>回复路径(Reply Path):移动电话可循发送SMS消息的短消息中心进行回复(但并非所有SMSC都会这样设置)。<BR><BR>01000000<BR>TP-UDH - 带有用户数据文件头<BR><BR>00100000<BR>TP-Status-Report-Indication - 发送状态报告给发信人,表示消息收到<BR><BR>00010000<BR>00001000<BR>此两类在正常的移动终接短消息(MT,Mobile Terminated SMS)中不会使用。<BR><BR>00000100<BR>TP-More Messages to Send - SMSC内再无新消息发送给该移动电话。<BR><BR>00000010<BR>00000001<BR>最后两个位数表示消息种类 - 10指是移动终接短消息(MT),01指移动起始短消息(MO,Mobile Originated SMS)。<BR><BR>所以"04"指此条消息是正常的移动终接短消息,SMSC内再无新消息发送给该手机。<BR><BR><BR>my mail : jinwutongbj@yahoo.com.cn
<HR>
我有
<HR>
谢谢各位提供的代码。
<HR>
gyh75:<BR>lqk586@126.com<BR>能把源码发给我吗?十分感谢!
<HR>
谢谢 </DIV></DIV>
<DIV id=footer>
<SCRIPT src="谁有手机发送短信源代码-ActiveX 控件-Delphi.files/footer.js"></SCRIPT>
</DIV></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -