procedure TForm1.ComPortInitialize;
var
  lpdcb:Tdcb;
  hcom: THandle;
Begin
  hcom:=createfile('com1',generic_read or generic_write,0,nil,open_existing,file_flag_overlapped,0);//打开串行口
  if hcom=invalid_handle_value then
   showMessage('无法打开串口!')
    else
     begin
     SetupComm(hcom,4096,4096);          //设置缓冲区长度
     getCommState(hcom,lpdcb);           //设置串口
     lpdcb.baudrate:=9600;
     lpdcb.stopbits:=0;
     lpdcb.bytesize:=8;
     lpdcb.parity:=0;
     setCommState(hcom,lpdcb);
     SetCommMask(Hcom,ev_Rxchar);
     CloseHandle(hcom);
     showmessage('设置成功!');         //设置串口事件屏蔽
  end;
end;
有什么问题吗?
为什么设置后查看计算机的串口波特率还是原来的啊??

解决方案 »

  1.   

    No Problem!
    查看计算机串口属性看到的应该是给他设的初值,你在程序是动态改变端口的属性!
    可以写一段发送数据程序,用串口秀接收你程序发送的数据试试就知道了啊!
      

  2.   

    我现在动态改变串口属性,然后再取当前串口大小是改变的.
    但是我设置了以后是想让其他程序使用这个波特率.
    也就是说改变WINDOWS里的串口的波特率,有没有办法?
      

  3.   

    没明白你的意图是什么啊!!!
    其他程序没有改变波特率的吗??
    那样你为什么不在WINDOWS里把串口属性的波特率直接设为你想要的值就可以了。为什么要那么麻烦啊!
      

  4.   

    >>为什么设置后查看计算机的串口波特率还是原来的啊??你在设备管理器看到的,并不会影响这里
      

  5.   

    参考一下:
    procedure Tform1.comminitialize;                     // 串 行 口 初 始 化varlpdcb:Tdcb;Beginhcom:=createfile('com2',generic_read or generic_write,0,nil,open_existing,                  file_attribute_normal or file_flag_overlapped,0);// 打 开 串 行 口    if hcom=invalid_handle_value then    else       setupcomm(hcom,4096,4096); // 设 置 输 入, 输 出 缓 冲 区 皆 为4096 字 节        getcommstate(hcom,lpdcb);  // 获 取 串 行 口 当 前 默 认 设 置        lpdcb.baudrate:=2400;        lpdcb.StopBits:=1;        lpdcb.ByteSize:=8;        lpdcb.Parity:=EvenParity;    // 偶 校 验        Setcommstate(hcom,lpdcb);        setcommMask(hcom,ev_rxchar);      // 指 定 串 行 口 事 件 为 接 收 到 字 符;end;