我想实现最基本的‘发短信’功能,在delphi中传送指令如下:at+cpms="ME","ME","ME"       //  设定首选存储区
at+cmgf=1                    //  text mode
at+csca="13800290500",129    //  说明短信中心地址
at+csmp=17,167,0,0           //  设定mode参数
at+cmgs="13609241873",129
> this is a test programme!!!^Z    //   发短信但是,程序执行之后,没有任何反应,请高手指出程序错误或者调试方法???
谢谢!

解决方案 »

  1.   

    你的指令还不够的,还有
    at+cmgs=""引号里应该是UNICODE码不是GB码,后面加#26结束就是加CTRL+Z
      

  2.   

    过客兄弟,能不能详细一点:unicode 号码是什么呀,我刚开始做这个,不懂!还有在delphi中,at+cmgs=""作为str能被传送过去吗,传送“”时,是不是要变换一下?兄弟能不能留下qq,帮我解决这个问题呢?
      

  3.   

    我做过Simens的手机短信报警的,你给我发消息,晚上我把一些关键代码发上来
      

  4.   

    procedure TfrmMain.OpenPort;
    var
      cc:TCOMMCONFIG;
      Temp:string;
    begin
      Temp := ComName; // 选择所要打开的COM
      //Temp:='COM1';
      hComm:=CreateFile(PChar(Temp), GENERIC_READ or GENERIC_WRITE,
           0, nil, OPEN_EXISTING, 0, 0);// 打开COM
      if (hComm = INVALID_HANDLE_VALUE) then begin//如果COM 未打开
        MessageBox (0, '打开通信端口错误!!','',MB_OK);
        exit;
      end;  GetCommState(hComm,cc.dcb);  // 得知目前COM 的状态
      cc.dcb.BaudRate:=CBR_115200;  // 设置波特率为115200
      cc.dcb.ByteSize:=8;        //字节为 8 bit
      cc.dcb.Parity:=NOPARITY;  // Parity 为 None
      cc.dcb.StopBits:=ONESTOPBIT;// 1 个Stop bit  if not SetCommState(hComm, cc.dcb) then begin// 设置COM 的状态
        MessageBox (0, '通信端口设置错误!!!','',MB_OK);
        CloseHandle(hComm);//关闭通信端口
        exit;
      end;
    end;
      

  5.   

    function GB2Unicode(GB:string):string;
    var
      s: string;
      i, j, k: integer;
      a: array [1..1000] of char;
    begin
      s:='';
      StringToWideChar(GB, @(a[1]), 500);
      i:=1;
      while ((a[i]<>#0) or (a[i+1]<>#0)) do
      begin
        j:=Integer(a[i]); k:=Integer(a[i+1]);
        s:=s+Copy(Format('%X ',[k*$100+j+$10000]) ,2,4);
        i:=i+2;
      end;
      Result:=s;
    end;function ReadHex(AString:string):integer;
    begin
      Result:=StrToInt('$'+AString)
    end;function UnicodeToAnsi(Unicode: string):string;
    var
      s:string;
      i:integer;
      j,k:string[2];
    begin
      i:=1;
      s:='';
      while i<Length(Unicode)+1 do begin
        j:=Copy(Unicode,i+2,2);
        k:=Copy(Unicode,i,2);
        i:=i+4;
        s:=s+Char(ReadHex(j))+Char(ReadHex(k));
      end;
      if s<>'' then
        s:=WideCharToString(PWideChar(s+#0#0#0#0))
      else
        s:='';
      Result:=s;
    end;
      

  6.   

    procedure TfrmMain.InitComm;      //初始化SIM卡
    //var
    //  i: Integer;
    begin
      SendData('AT+CMGF=1',False);
      MyMethod.Delay(300);
      SendData('AT+CSCS="UCS2"',False);
      MyMethod.Delay(300);
      SendData('AT+CSMP=17,167,0,25',False);
      MyMethod.Delay(300);
    end;procedure TfrmMain.SendData(AStr: string; AFlag: Boolean);   //发送信息至串口
    Var
      s: string;
      lrc:LongWord;
    begin
      if (hComm=0) then
        exit;//若尚未打开通信端口,则跳出
      if not AFlag then
        s := AStr+Chr(13)+Chr(10)
      else
        s := AStr+#26;
      WriteFile(hComm,Pointer(s)^,Length(s), lrc, nil); //送出数据
      //comm1.WriteCommData(Pchar(s),Length(s));
    end;你的SIM卡波特率一定要设置对,短信中心先在手机里面设置好,不要在程序中设置她
    你可以先在电脑-附件-超级终端里面试,如果这里面行,那程序里发送同样的字符串过去就可以了
      

  7.   

    如果用这个指令:AT+CSCS="GSM",该怎么编码呢?
    还有,'AT+CSMP=17,167,0,25'中,25这个参数是什么意思?诚心求教!!