Delphi使用两种不同方法获取系统端口信息--(装载)
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使用两种不同方法获取系统端口信息--(装载)的更多相关文章
- 关于vector的erase删除操作的两种不同方法,在linux与visual studio的实现讨论
关于vector的erase删除操作的两种不同方法,在linux与visual studio的实现讨论 1.前言: 最近在做某一个题时,用到了vector的删除操作,利用的是erase()函数删除符合 ...
- ThinPHP命名空间,连接数据库是要修改的配置文件,Model数据模型层,跨控制器调用,如何获取系统常量信息,
一.命名空间(主要是为了实现自动加载类) *命名空间(相当于虚拟的目录),为了让类有一个统一的文件夹来管理(可以自动加载'类'),每个文件都要有命名空间*tp如何做命名空间:*TP框架下有一个初始命名 ...
- ThinkPHP框架 3.2.2 获取系统常量信息 连接数据库 命名空间的理解
获取系统常量信息 随便一个方法里加上这句话都能获取到系统常量信息!! var_dump(get_defined_constants()); <?php namespace Admin\Contr ...
- Linux sysinfo获取系统相关信息
Linux中,可以用sysinfo来获取系统相关信息. #include <stdio.h> #include <stdlib.h> #include <errno.h& ...
- android 获取系统硬件信息
一,首先设置权限访问: <uses-permission android:name="android.permission.READ_PHONE_STATE" /> ...
- 获取系统相关信息 (CPU使用率 内存使用率 系统磁盘大小)
引言 在软件开个过程中,对于软件的稳定性和使用率也是我们需要关注的 . 使用sigar来监控,简单方便! 使用说明:下载sigar jar及配合sigar的dll文件来用,需要将dll文件放到JD ...
- 通过java的Runtime.getRuntime()和System.getProperties()来获取系统的信息
第一种,通过Runtime.getRuntime()来获取系统信息. 通过java来获取系统以下的信息: 主机名: OS 名称: OS 版本: OS 制造商: OS 配置: 独立工作站 ...
- Revit二次开发-根据Element获取系统族信息
Element element = doc.getElement(elementId); Autodesk.Revit.DB.Parameter familyType = element.get_Pa ...
- Linux C 语言 获取系统时间信息
比如获取当前年份: /* 获取当前系统时间 暂时不使用 int iyear = 0; int sysyear = 0; time_t now; ...
随机推荐
- 英语口语练习系列-C35-马戏-谈论语言-己亥杂诗
词汇-马戏 circus audience spectator spotlight bandstand magic magician clown spacious attractive product ...
- Windows下利用MKL加速caffe,与openblas比较
一.介绍:先简单Mark一下网上的介绍资料,弄清楚MKL是个啥,已经与openblas等的关系. 矩阵运算库blas, cblas, openblas, atlas, lapack, mkl之间有什么 ...
- django缓存、信号、序列化
本篇导航: Django的缓存机制 Django的信号 Django的序列化 一.Django的缓存机制 1.缓存介绍 1)缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增, ...
- __x__(34)0908第五天__ 定位 position
position 定位 指将原始摆放到页面的任意位置. 继承性:no 默认值:static 没有定位,原始出现在正常的文档流中 可选值: static : 默认值,元素没有开启定位 ...
- js 设计模式之观察者模式
观察者模式 又被称为“发布-订阅”模式,目的是解决主题对象和观察者之间功能的耦合性.发布者和订阅者之间是互不干扰的,没有联系的,通过观察者,当做中介,将二者联系起来. 例子:以学生和老师之间的为例 1 ...
- scrapy模拟登录
对于scrapy来说,也是有两个方法模拟登陆: 直接携带cookie 找到发送post请求的url地址,带上信息,发送请求 scrapy模拟登陆之携带cookie 应用场景: cookie过期时间很长 ...
- margin-bottom在safari浏览器失效的问题
今天遇到一个bug是底部明明有margin-bottom却无法作用,排查了一下改成用padding可以有效 但不找出原因是无法完成这篇博客的 问题概要描述:在safari中,当内容高度超出所有父容器时 ...
- SQL2005EXPress自动备份
STEP1:在数据库服务器的master表中创建存储过程sp_BackupDatabase 代码如下 USE [master] GO /****** 对象: StoredProcedure [dbo] ...
- 从vue源码看Vue.set()和this.$set()
前言 最近死磕了一段时间vue源码,想想觉得还是要输出点东西,我们先来从Vue提供的Vue.set()和this.$set()这两个api看看它内部是怎么实现的. Vue.set()和this.$se ...
- 树莓派3 之 启动显示和wifi相关参数设置
最近将树莓派操作系统重新安装了,然后发现了一些问题.这里分享出来给大家 问题一:连接外置显示器黑屏 解决方法:将SD卡 插入电脑,在电脑中找到SD卡 修改其中的config.txt文件 #强制使用HD ...