Delphi使用两种方法获取windows系统的端口,还可测试发送消息,点击获取端口信息后,可依次得到如下信息:DCB结构大小、波特率大小、XON的临界值、XOFF的临界值、字符位数、奇偶检验位、停止位、XON字符等,也可设置端口信息,设置SPCOMM端口信息:

unit Unit1;
interface
usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, SPComm, StdCtrls, ComCtrls;
typeTForm1 = class(TForm)Edit1: TEdit;Button2: TButton;Memo1: TMemo;Button3: TButton;Button1: TButton;Label1: TLabel;Button4: TButton;Comm1: TComm;Edit2: TEdit;Button5: TButton;StatusBar1: TStatusBar;procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);procedure Button1Click(Sender: TObject);procedure Button4Click(Sender: TObject);procedure Button5Click(Sender: TObject);procedure FormDestroy(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
varCommPort : string;hCommFile : THandle;hdcb:DCB;
begin
commport:=Edit1.Text;
hCommFile := CreateFile(PChar(CommPort),GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);//打开端口失败的处理if hCommFile =INVALID_HANDLE_VALUE thenStatusbar1.SimpleText:='不能打开端口';GetCommState(hcommFile,hdcb);  //获取DCB结构信息
 Memo1.Clear;Memo1.Lines.Add('DCB结构大小是:'+IntToStr(hdcb.DCBlength)+#13#10+'波特率大小是: '+IntToStr(hdcb.BaudRate)+#13#10+'XON的临界值是:'+IntToStr(hdcb.XonLim)+#13#10+'XOFF的临界值是:'+IntToStr(hdcb.XoffLim)+#13#10+'字符位数是:'+IntToStr(hdcb.ByteSize)+#13#10+'奇偶检验位:'+IntToStr(hdcb.Parity)+#13#10+'停止位:'+IntToStr(hdcb.StopBits)+#13#10+'XON字符:'+hdcb.XonChar+#13#10+'XOFF字符:'+hdcb.XoffChar+#13#10+'奇偶错误代替字符:'+hdcb.ErrorChar+#13#10+'结束字符:'+hdcb.EofChar+#13#10+'时间字符:'+hdcb.EvtChar+#13#10);CloseHandle(hcommfile);//关闭端口句柄,否则重新执行程序时会调用空句柄,不能得到正确的参数值
end;
procedure TForm1.Button3Click(Sender: TObject);
varCommPort : string;hCommFile : THandle;Buffer : PCommConfig;size : DWORD;
beginCommPort := 'COM2';hCommFile := CreateFile(PChar(CommPort),GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);if hCommFile=INVALID_HANDLE_VALUE thenbeginStatusbar1.SimpleText:='不能打开 '+ CommPort;exit;end;GetMem(Buffer, sizeof(TCommConfig));GetCommConfig(hCommFile, Buffer^, size);FreeMem(Buffer, sizeof(TCommConfig));GetMem(Buffer, size);GetCommConfig(hCommFile, Buffer^, size);if CommConfigDialog(PChar(CommPort),Handle,Buffer^) = true thenSetCommConfig(hCommFile, Buffer^, size);FreeMem(Buffer, size);CloseHandle(hCommFile);
end;
procedure TForm1.Button1Click(Sender: TObject);
varsetComm : string;hsetFile : THandle;hsetdcb:DCB;
begin//设置断口信息
setcomm:=Edit1.Text;
hsetFile := CreateFile(PChar(setComm),GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);//打开端口失败的处理if hsetFile =INVALID_HANDLE_VALUE thenStatusbar1.SimpleText:='不能打开端口';GetCommState(hsetFile,hsetdcb);hsetdcb.BaudRate:=2400;hsetdcb.StopBits:=2;hsetdcb.ByteSize:=4;SetCommState(hsetFile,hsetdcb);  //获取DCB结构信息closeHandle(hsetfile);           //关闭端口
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
comm1.StopComm;    //先关闭端口
{设置一些必要的参数}
Comm1.CommName:=Edit1.Text;
Comm1.BaudRate:=9600;
Comm1.ByteSize:=_8;
Comm1.StopBits:=_1;
Comm1.Parity:=None;
Trycomm1.StartComm;    //打开端口
exceptraise Exception.create('打开端口'+comm1.CommName+'出错了');
end;Statusbar1.SimpleText:=Comm1.CommName+'打开了';Button5.Enabled:=True;
end;
procedure TForm1.Button5Click(Sender: TObject);
var str:string;count:WORD;
begin
str:=pchar(Edit2.Text);
count:=length(str);
If comm1.WriteCommData(pchar(str),count) ThenStatusbar1.SimpleText:='已经发送'+IntToStr(count)+'字符'ElseStatusbar1.SimpleText:='发送不成功';
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Comm1.StopComm;  //关闭端口
end;
end.

View Code

转载于:https://www.cnblogs.com/Coder-MIFir/p/10677139.html

Delphi使用两种不同方法获取系统端口信息--(装载)相关推荐

  1. 3种关闭linux系统端口方法

    下面总结三种关闭linux系统端口的方法 1.通过杀掉进程的方法来关闭端口 每个端口都有一个守护进程,kill掉这个守护进程就可以了 每个端口都是一个进程占用着, 第一步.用下面命令 netstat ...

  2. python字符串成熟编码_python字符串转公式两种方法获取网页编码python版

    在web开发的时候我们经常会遇到网页抓取和分析,各种语言都可以完成这个功能.我喜欢用python实现,因为python提供了很多成熟的模块,可以很方便的实现网页抓取. 但是在抓取过程中会遇到编码的问题 ...

  3. 如何关闭linux系统的53端口,3种关闭linux系统端口方法

    下面总结三种关闭linux系统端口的方法 1.通过杀掉进程的方法来关闭端口 每个端口都有一个守护进程,kill掉这个守护进程就可以了 每个端口都是一个进程占用着, 第一步.用下面命令 netstat ...

  4. 如何关闭linux系统的53端口,3种关闭linux系统端口方法(示例代码)

    下面总结三种关闭linux系统端口的方法 1.通过杀掉进程的方法来关闭端口 每个端口都有一个守护进程,kill掉这个守护进程就可以了 每个端口都是一个进程占用着, 第一步.用下面命令 netstat ...

  5. 华为路由器接口如何区分_华为路由的线路输出的两种不同方法简介

    华为路由的线路输出的两种不同方法简介 发布时间:2012-12-12 11:42:09   作者:佚名   我要评论 对于路由器而言,我们可以根据不同的情况来采用不同的出口方式,尤其是在一些高端路由组 ...

  6. python获取系统硬件信息

    python获取系统硬件信息 github项目 https://github.com/giampaolo/psutil cpu,内存,etc.

  7. GetVersionEx 获取系统版本信息

    转自:http://blog.csdn.net/yyingwei/article/details/8286658 最近在windows 8上获取系统版本信息需要调用系统API,于是用到了GetVers ...

  8. ansible playbook脚本获取系统版本信息

    ansible playbook脚本获取系统版本信息 执行环境说明 脚本执行过程中实测系统为 redhat6.redhat7 suse11 suse12: [root@ansible_host ~]# ...

  9. 【C函数】sysinfo获取系统相关信息

    Linux中,sysinfo是用来获取系统相关信息的结构体,返回系统的统计信息. 头文件: #include <sys/sysinfo.h> 函数声明: int sysinfo (stru ...

最新文章

  1. 安装交叉工具链arm-linux-gcc
  2. 架构师之路 — 业务架构 — Overview
  3. Laravel的初始化安装
  4. javase_03作业
  5. JavaScript DOM编程艺术(第2版) 笔记
  6. Theano 中文文档 0.9 - 1. 欢迎
  7. Linux Socket C语言网络编程:TCP Socket
  8. 网页页面禁止用户复制源代码
  9. 虚拟机下安装MS-DOS
  10. 幻灯片形式设计:从方法到技巧
  11. MWD仪器组装和原理
  12. 计算机基础知识考什么,我想请问下,计算机初级考试考些什么东西?
  13. 1.自学软件测试之虚拟机安装
  14. RFI/RFP/RFQ的区别
  15. 初、中、高级前端工程师水平怎么划分?
  16. element-ui表格的头部border有空隙的解决办法
  17. ecplise使用及配置
  18. 机器学习 4 个常用超参数调试方法!
  19. [STM32CubeIDE]创建HAL库项目
  20. 思路决定出路,结果改变人生

热门文章

  1. Python全栈开发——subprocess struct
  2. 数据库视图作用?什么时候用视图?
  3. 【华为编程大赛】洞穴逃生
  4. 【JavaScript】AJAX总结(异步JavaScript和XML)
  5. UML全程实训(2012-7-7 广州)
  6. 【Java】TCP Socket编程案例——文件传输聊天工具
  7. 【体系结构】一条SQL语句经历了什么
  8. 在线手机号码提取工具
  9. Congratulations! A Success Case on GDPR
  10. 技术分享连载(七十九)