请问如何使用SPCOMM或MSCOMM控件通过红外线或串口线,进行短信发送(最好以NOKIA为例),望大侠解囊相助(付上500分)

解决方案 »

  1.   

    请楼主到
    http://www.8860.net/delphicode/default.asp  http://218.56.11.178:8018/     
    中搜一下,我见过这样的例子
      

  2.   

    在winxp下,红外端口可以直接当作串口线来操作,然后对串口操作就可以了,去网上搜索nokia的接口命令集,基本上就是一个modem的命令集,如果要发送短信,需要一个编码和解码的小程序。win2k下面的红外端口不太一样,我没有试验成功过。
      

  3.   

    这个是我搜索到的编码解码资料,给你做个参考手机短信息,SMS开发,编码,解码 
      
      
     1、 英文编码缺省的GSM字符集为7位编码,ASCII码为8位编码,编码就是将8位ASCII编码转换为7位编码。例如:1234 编码后得到31D98C06
    2进制表示
    8位编码 00110001 00110010 00110011 00110100
    7位编码 00110001 11011001 10001100 00000110 通过例子可以看出,将ascii8位编码的Bit8去掉,依次将下7位编码的后几位逐次移到前面,形成新的8位编码。
    以下是C++Builder的实现代码:String __stdcall EncodeEnglish(String InputStr){
    int n,len,cur;
    String tempstr,returnstr;
    unsigned char mid1[2],mid2[2];
    len=InputStr.Length();
    n=0;
    for(int i=1;i<=len;i++)
      {
      if (i<len)
        {
        strcpy(mid1,InputStr.SubString(i,1).c_str());
        strcpy(mid2,InputStr.SubString(i+1,1).c_str());
        cur=(mid1[0]>>n)|((mid2[0]<<(7-n))& 0xff);
        }
      else
       {
       strcpy(mid1,InputStr.SubString(i,1).c_str());
       cur=(mid1[0]>>n)& 0x7f;
       }
      FmtStr(tempstr,"%2.2X",ARRAYOFCONST((cur)));
      returnstr=returnstr+tempstr;
      n=(n+1)%7;
      if (n==0)
        i++;
      }
    return returnstr;
    }2、 英文解码简单地说就是将7位字符编码转换为8为字符编码以下是C++Builder的实现代码:int ReturnHex(int Value)
    {
    switch (Value)
      {
      case 0:
        Value=0x7f;
        break;
      case 1:
        Value=0x3f;
        break;
      case 2:
        Value=0x1f;
        break;
      case 3:
        Value=0x0f;
        break;
      case 4:
        Value=0x07;
        break;
      case 5:
        Value=0x03;
        break;
      case 6:
        Value=0x01;
        break;
      case 7:
        Value=0x00;
        break;
      }
    return Value;
    }String __stdcall DecodeEnglish (String InputStr)
    {
    unsigned char InStr[300];
    char OutStr[300];
    String str;
    int j=0,i=0;
    int Point=0;
    int temp;
    memset(InStr,0,301);
    memset(OutStr,0,301);
    for(int i=0;i<InputStr.Length();i=i+2)
      {
      str="0x"+InputStr.SubString(i+1,2);
      InStr[i/2]=StrToInt(str);
      }
    while(j<=InputStr.Length()/2)
      {
      if(Point==0)
        OutStr[i]=InStr[j]&ReturnHex(Point);
      else
        OutStr[i]=((InStr[j]&ReturnHex(Point))<<Point)|(InStr[j-1]>>(8-Point));
      if(Point%7==0&&Point!=0)
        Point=0;
      else
        Point=Point+1;
      i++;
      j=i-(i/8);
      }
    OutStr[12]=((InStr[12]&0x07)<<5)|(InStr[11]>>(8-5));
    return AnsiString(OutStr);
    }3、 中文编码中文编码较为简单,就是将GB2312的中文编码转换为代码页为CP936的Unicode编码即可
    以下是C++Builder的实现代码String EncodeChinese(String InputStr)
    {
    int cur;
    String tempstr,returnstr;
    WideString ws;
    wchar_t mid[2];
    ws=WideString(InputStr);
    for(int i=1;i<=ws.Length();i++)
      {
      wcscpy(mid,ws.SubString(i,1).c_bstr());
      cur=mid[0];
      FmtStr(tempstr,"%4.4X",ARRAYOFCONST((cur)));
      returnstr=returnstr+tempstr;
      }
    return returnstr;
    }4、 中文解码将代码页为CP936的Unicode编码转换为GB2312的中文编码即可
    以下是C++Builder的实现代码String DecodeChinese(String InputStr)
    {
    wchar_t Buf[300];
    for(int i=0;i<InputStr.Length();i=i+4)
      {
      Buf[i/4]=StrToInt("0x"+InputStr.SubString(i+1,4));
      }
    Buf[InputStr.Length()/4]=0;
    return WideCharToString(Buf);
    }
     
      

  4.   

    还有一篇文章介绍命令集的,因有图片我不知道如何发送上来,如果你需要可以留下mail
      

  5.   

    給俺一個
    [email protected]謝謝
      

  6.   

    cbnicbni(cbnicbni)谢谢帮忙,我查找有关资料目前可以发英文短信,但中文还是发不了,望帮忙,谢谢我的EMAIL:[email protected]