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. [Mongo]Linux上启动与关闭MongoDB

    文档地址:https://docs.mongodb.com/v3.0/tutorial/install-mongodb-on-amazon/ 默认配置下,Mongo实例会将其数据文件存放在/var/l ...

  2. 2017-2018 ACM-ICPC Pacific Northwest Regional Contest (Div. 1)

    A. Odd Palindrome 所有回文子串长度都是奇数等价于不存在长度为$2$的偶回文子串,即相邻两个字符都不同. #include<cstdio> #include<cstr ...

  3. Tips_利用padding实现高度可控的分隔线

    一.实现分隔线的方法(未理解:不是说span元素垂直方向设置怕padding不影响吗?) html: <div> 登陆<span></span>注册 </di ...

  4. __x__(30)0908第五天__导航条的练习 <div>版本

    效果图:  html源代码: <!doctype html> <html> <head> <meta charset="utf-8" /& ...

  5. ajax 传递中文字符参数 问题

    使用ajax 传递中文字符串时, 服务端会接收不到预期的 中文字符. 此时,需要对 js中的中文字符参数进行 编码,  到达服务端后, 再为其解码 即可. 前端: var url = '....'; ...

  6. flexible.js 移动端自适应方案

    一,flexible.js 的使用方式: github地址:https://github.com/amfe/lib-flexible 官方文档地址:https://github.com/amfe/ar ...

  7. Python练手例子(7)

    37.对10个数进行排序. 程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换. #python 3.7 if __n ...

  8. SyntaxError: invalid character in identifier(Python)

    在写博客时直接将博客上的代码复制运行后发现错误SyntaxError: invalid character in identifier,我以为是l(小L)写成了1,改了还是不行. 上网查了下,发现原来 ...

  9. radio选中与不选中

    $("input[name='bankCardType']").val("sdf"); $('input:radio[name="bankCardTy ...

  10. Python 学习笔记6 变量-字典

    字典是python中一个十分重要的变量,他是一个可变的容器对象.通过一组key(键)和value(值)对组成一个元素. 组成形式为{'key':'value', 'key':'value'}.整个字典 ...