要求能实现对PC机的串行口进行直接操作,请问应该怎么实现?最好有原代码。
解决方案 »
- 如何给控件组附值
- 如何暂时使得TQuery下的所有永久字段的OnChange/OnGetText...等事件失效
- sql语句,谢谢
- 关于wm_char消息使用的问题???????????????????????????????????????????
- 奇怪问题:为什么有时候两个相同数字比较时会出现不相等的状况。
- 请进来回答一个小问题
- 请教高手 delphi中如何获取vfp的控件的属性?
- 字段小數點位數由4位修改為6位,對速度有何影響(本人已經開三個貼子只有一個貼子結了還是我自己搞定,希望這個貼子大家help me),大家可以從
- 高分有请...
- Darkness请进(关于Midas)!
- 我要做一个发票管理软件,要实现让用户自己设计发票界面,并保存这个界面,可供以后选择或者打印这个发票格式。
- 呵呵,这个问题高手也难答:谁用ListView做过类似ACDSee的浏览缩略图的控件?我们交流一下。
unit Comminterfaceuses
windows,messages,sysutils,classes,graphics,controls,forms,dialogs,stdctrls;const
WM_COMMNOTIFY=WIN_USER+1;type TForm1=class(TForm)
procedure FormCreate(Sender:TObject);
private
procedure CommInitialize;
procedure MsgCommProcess(var Message:TMessage):message WM_COMMNOTIFY;
public
end; //线程声明
TComm=class(TThread)
protected
procedure Execute;override;
end;var
Form1:TForm1;
hCom,Post_Event:THandle;
lpol:Poverlappped;implementation{$R *.DFM}
procedure TComm.Execute;//线程执行
var
dwEvtMask:DWord;
Wait:boolean;
begin
FillChar(lpol,SizeOf(Toverlappped),0);
While true do
begin
//等待串口事件
Wait:=WaitCommEvent(hCom,dwEvtMask,lpol);
if Wait then
//等待同步事件置位
WaitForSingleObject(Post_Event,infinite);
//同步事件复位
ResetEvent(Post_Event);
//发送消息
PostMessage(Form1.Handle,WM_COMMNOTIFY,0,0); end;
end; //初试化串行口
procedure TForm1.CommInitialize;
var
lpDCB:TDCB;
begin
hCom:=CreateFile('com2',Generic_Read or Generic_Write,0,nil,Open_Existing,File_Attribute_Normal or File_Flag_OverLapped,0)
if hCom=invalid_handle_value then
begin
ShowMessage('Unable to Open COM2.');
Exit;
end;
SetupComm(hComm,4096,4096);//设置输入、输出缓冲区的大小为4096字节
GetCommState(hCom,lpDCB);
lpDCB.baudrate:=2400;
lpDCB.StopBits:=1;
lpDCB.ByteSize:=8;
lpDCB.Parity:=EvenParity;//偶校验
SetCommState(hCom,lpDCB);
SetCommMask(hCom,ev_rxchar); //指定串口事件为接受到字符
end; procedure TForm1.MsgCommProcess(var Message:TMessage);
var
Clear:boolean;
Coms:TComStat;
cbNum,ReadNumber,lpErrors:DWord;
Readd_Buffer:array [1..100] of char;
begin
Clear:=ClearCommError(hCom,lpErrors,@Coms);
if Clear then
begin
cbNum:=Coms.cbInQue;
ReadFile(hCom,Read_Buffer,cbNum,ReadNumber,lpol);
SetEvent(post_Event);
end;
end;procedure TForm1.FormCreate(Sender:TObject);
begin
CommInitialize;
Post_Event:=CreateEvent(nil,true,true,nil);//创建同步事件
TComm.Create(false);//创建串口监视线程
end;
高手啊!
这正是我要的,谢谢了!