Delphi使用两种不同方法获取系统端口信息--(装载)
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使用两种不同方法获取系统端口信息--(装载)相关推荐
- 3种关闭linux系统端口方法
下面总结三种关闭linux系统端口的方法 1.通过杀掉进程的方法来关闭端口 每个端口都有一个守护进程,kill掉这个守护进程就可以了 每个端口都是一个进程占用着, 第一步.用下面命令 netstat ...
- python字符串成熟编码_python字符串转公式两种方法获取网页编码python版
在web开发的时候我们经常会遇到网页抓取和分析,各种语言都可以完成这个功能.我喜欢用python实现,因为python提供了很多成熟的模块,可以很方便的实现网页抓取. 但是在抓取过程中会遇到编码的问题 ...
- 如何关闭linux系统的53端口,3种关闭linux系统端口方法
下面总结三种关闭linux系统端口的方法 1.通过杀掉进程的方法来关闭端口 每个端口都有一个守护进程,kill掉这个守护进程就可以了 每个端口都是一个进程占用着, 第一步.用下面命令 netstat ...
- 如何关闭linux系统的53端口,3种关闭linux系统端口方法(示例代码)
下面总结三种关闭linux系统端口的方法 1.通过杀掉进程的方法来关闭端口 每个端口都有一个守护进程,kill掉这个守护进程就可以了 每个端口都是一个进程占用着, 第一步.用下面命令 netstat ...
- 华为路由器接口如何区分_华为路由的线路输出的两种不同方法简介
华为路由的线路输出的两种不同方法简介 发布时间:2012-12-12 11:42:09 作者:佚名 我要评论 对于路由器而言,我们可以根据不同的情况来采用不同的出口方式,尤其是在一些高端路由组 ...
- python获取系统硬件信息
python获取系统硬件信息 github项目 https://github.com/giampaolo/psutil cpu,内存,etc.
- GetVersionEx 获取系统版本信息
转自:http://blog.csdn.net/yyingwei/article/details/8286658 最近在windows 8上获取系统版本信息需要调用系统API,于是用到了GetVers ...
- ansible playbook脚本获取系统版本信息
ansible playbook脚本获取系统版本信息 执行环境说明 脚本执行过程中实测系统为 redhat6.redhat7 suse11 suse12: [root@ansible_host ~]# ...
- 【C函数】sysinfo获取系统相关信息
Linux中,sysinfo是用来获取系统相关信息的结构体,返回系统的统计信息. 头文件: #include <sys/sysinfo.h> 函数声明: int sysinfo (stru ...
最新文章
- 安装交叉工具链arm-linux-gcc
- 架构师之路 — 业务架构 — Overview
- Laravel的初始化安装
- javase_03作业
- JavaScript DOM编程艺术(第2版) 笔记
- Theano 中文文档 0.9 - 1. 欢迎
- Linux Socket C语言网络编程:TCP Socket
- 网页页面禁止用户复制源代码
- 虚拟机下安装MS-DOS
- 幻灯片形式设计:从方法到技巧
- MWD仪器组装和原理
- 计算机基础知识考什么,我想请问下,计算机初级考试考些什么东西?
- 1.自学软件测试之虚拟机安装
- RFI/RFP/RFQ的区别
- 初、中、高级前端工程师水平怎么划分?
- element-ui表格的头部border有空隙的解决办法
- ecplise使用及配置
- 机器学习 4 个常用超参数调试方法!
- [STM32CubeIDE]创建HAL库项目
- 思路决定出路,结果改变人生