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

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, SPComm, StdCtrls, ComCtrls;
type
TForm1 = 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; var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
var
CommPort : string;
hCommFile : THandle;
hdcb:DCB;
begin
commport:=Edit1.Text;
hCommFile := CreateFile(PChar(CommPort),GENERIC_READ or GENERIC_WRITE,
,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,);
//打开端口失败的处理
if hCommFile =INVALID_HANDLE_VALUE then
Statusbar1.SimpleText:='不能打开端口';
GetCommState(hcommFile,hdcb); //获取DCB结构信息
Memo1.Clear;
Memo1.Lines.Add('DCB结构大小是:'+IntToStr(hdcb.DCBlength)+##+
'波特率大小是: '+IntToStr(hdcb.BaudRate)+##+
'XON的临界值是:'+IntToStr(hdcb.XonLim)+##+
'XOFF的临界值是:'+IntToStr(hdcb.XoffLim)+##+
'字符位数是:'+IntToStr(hdcb.ByteSize)+##+
'奇偶检验位:'+IntToStr(hdcb.Parity)+##+
'停止位:'+IntToStr(hdcb.StopBits)+##+
'XON字符:'+hdcb.XonChar+##+
'XOFF字符:'+hdcb.XoffChar+##+
'奇偶错误代替字符:'+hdcb.ErrorChar+##+
'结束字符:'+hdcb.EofChar+##+
'时间字符:'+hdcb.EvtChar+##);
CloseHandle(hcommfile);
//关闭端口句柄,否则重新执行程序时会调用空句柄,不能得到正确的参数值
end;
procedure TForm1.Button3Click(Sender: TObject);
var
CommPort : string;
hCommFile : THandle;
Buffer : PCommConfig;
size : DWORD;
begin
CommPort := 'COM2';
hCommFile := CreateFile(PChar(CommPort),
GENERIC_WRITE,
,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
);
if hCommFile=INVALID_HANDLE_VALUE then
begin
Statusbar1.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 then
SetCommConfig(hCommFile, Buffer^, size);
FreeMem(Buffer, size);
CloseHandle(hCommFile);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
setComm : string;
hsetFile : THandle;
hsetdcb:DCB;
begin
//设置断口信息
setcomm:=Edit1.Text;
hsetFile := CreateFile(PChar(setComm),GENERIC_READ or GENERIC_WRITE,
,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,);
//打开端口失败的处理
if hsetFile =INVALID_HANDLE_VALUE then
Statusbar1.SimpleText:='不能打开端口';
GetCommState(hsetFile,hsetdcb);
hsetdcb.BaudRate:=;
hsetdcb.StopBits:=;
hsetdcb.ByteSize:=;
SetCommState(hsetFile,hsetdcb); //获取DCB结构信息
closeHandle(hsetfile); //关闭端口
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
comm1.StopComm; //先关闭端口
{设置一些必要的参数}
Comm1.CommName:=Edit1.Text;
Comm1.BaudRate:=;
Comm1.ByteSize:=_;
Comm1.StopBits:=_;
Comm1.Parity:=None;
Try
comm1.StartComm; //打开端口
except
raise 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) Then
Statusbar1.SimpleText:='已经发送'+IntToStr(count)+'字符'
Else
Statusbar1.SimpleText:='发送不成功';
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Comm1.StopComm; //关闭端口
end;
end.

Delphi使用两种不同方法获取系统端口信息--(装载)的更多相关文章

  1. 关于vector的erase删除操作的两种不同方法,在linux与visual studio的实现讨论

    关于vector的erase删除操作的两种不同方法,在linux与visual studio的实现讨论 1.前言: 最近在做某一个题时,用到了vector的删除操作,利用的是erase()函数删除符合 ...

  2. ThinPHP命名空间,连接数据库是要修改的配置文件,Model数据模型层,跨控制器调用,如何获取系统常量信息,

    一.命名空间(主要是为了实现自动加载类) *命名空间(相当于虚拟的目录),为了让类有一个统一的文件夹来管理(可以自动加载'类'),每个文件都要有命名空间*tp如何做命名空间:*TP框架下有一个初始命名 ...

  3. ThinkPHP框架 3.2.2 获取系统常量信息 连接数据库 命名空间的理解

    获取系统常量信息 随便一个方法里加上这句话都能获取到系统常量信息!! var_dump(get_defined_constants()); <?php namespace Admin\Contr ...

  4. Linux sysinfo获取系统相关信息

    Linux中,可以用sysinfo来获取系统相关信息. #include <stdio.h> #include <stdlib.h> #include <errno.h& ...

  5. android 获取系统硬件信息

    一,首先设置权限访问: <uses-permission android:name="android.permission.READ_PHONE_STATE" />  ...

  6. 获取系统相关信息 (CPU使用率 内存使用率 系统磁盘大小)

    引言 在软件开个过程中,对于软件的稳定性和使用率也是我们需要关注的 .  使用sigar来监控,简单方便!  使用说明:下载sigar jar及配合sigar的dll文件来用,需要将dll文件放到JD ...

  7. 通过java的Runtime.getRuntime()和System.getProperties()来获取系统的信息

    第一种,通过Runtime.getRuntime()来获取系统信息. 通过java来获取系统以下的信息: 主机名: OS 名称:         OS 版本: OS 制造商: OS 配置: 独立工作站 ...

  8. Revit二次开发-根据Element获取系统族信息

    Element element = doc.getElement(elementId); Autodesk.Revit.DB.Parameter familyType = element.get_Pa ...

  9. Linux C 语言 获取系统时间信息

    比如获取当前年份:        /* 获取当前系统时间 暂时不使用        int iyear = 0;        int sysyear = 0;        time_t now;  ...

随机推荐

  1. docker备份mongodb数据,导入导出

    场景:服务器要升级,之前在linux部署的mongodb没有用docker,升级后,mongodb要用docker部署,并将原有的mongodb数据导入到docker部署的mongodb中. 1.在l ...

  2. 18 徐州 M

    听了遍dls的讲解觉得这是个沙比题,结果调了两个小时... 主要注意的点有两个, 一个是 找每个灯覆盖的区间,这个用叉积看一下夹角即可 一个是 覆盖的时候点覆盖比边覆盖好写(个人感觉) 点覆盖的话,如 ...

  3. linux中安装和配置 jdk

    01.去官网下载指定的jdk 02.使用xftp把下载好的文件 传递到 linux指定文件夹中03.进入指定的文件夹输入tar -zxvf 文件名称04.发现文件 05.进入文件cd jdk1.8.0 ...

  4. 十三、事务、连接池 、ThreadLocal 、BaseServlet自定义Servlet父类 、 DBUtils à commons-dbutils

    l 事务 l 连接池 l ThreadLocal l BaseServlet自定义Servlet父类(只要求会用,不要求会写) l DBUtils à commons-dbutils 事务 l 事务的 ...

  5. Python3.6 提示 ModuleNotFoundError: No module named '_ssl' 模块问题

    国内 163 yum 源挺好用 (中科大的也不错) http://mirrors.163.com/.help/CentOS6-Base-163.repo yum install openssl-dev ...

  6. ubuntu下安装PyCharm的两种方式

    PyCharm一个是Python集成开发环境,它既提供收费的专业版,也提供免费的社区版本.PyCharm带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Proj ...

  7. [03-01]JDBC基础

    JDBC是什么? 1.java Database Connectivity:java访问数据库的解决方案: 2.用相同的方式访问不同的数据库,以实现与具体数据库无关的java操作界面: 3.JDBC定 ...

  8. Java-多态经典例子

    public class A { public String show(D obj) { return ("A and D"); } public String show(A ob ...

  9. 自动化脚本测试,postman使用沉淀

    // 服务器地址 var server = 'XXXXXXXXXXXX'; //秘钥Key var secretKey = 'XXXXXXXXXXXX'; //获取当前时间 function crea ...

  10. python操作mysql数据-执行语句返回值直接返回字典类型

    fetchall()将结果放在二维数组里面,每一行的结果在元组里面 import pymysql def export(table_name): conn =pymysql.connect(host ...