GetCommState(ComPort) { ;-- 此函数检索给定串行端口的配置设置 /* DESCRIPTION this function retrieves the configuration settings of a given serial port. Having hardly any C\C experience it took me some time to find out that there is a bitmask in the DCB (Device Configuration Block) structure. Using BuildCommDCB and SetCommState functions it should also be possible to configure a serial port. Data can be written to a serial port using one of the binary writing functions on this forum. I appologize for the script not beeing commented at all, also I am not sure if I did everything right. Comments and suggestions are welcome. Regards, olfen Dependencies: DecToBin() ExtractInteger() */ /* EXAMPLE(s) msgbox, % GetCommState(4) listvars pause */ global local h, cs, ch, port, DCB, Str, Uint port=com%comport% h := DllCall("CreateFile","Str", port,"Uint",0x80000000,"Uint",3,"UInt",0,"UInt",3,"Uint",0,"UInt",0) If (h = -1 or h = 0 or ErrorLevel != 0) return, -1 VarSetCapacity(DCB, 28, 0) cs := DllCall("GetCommState", Uint, h, str, DCB) If (cs = 0 or ErrorLevel != 0) return, -2 ;DCB_DCBlength:=ExtractInteger(DCB, 0, true, 4) DCB_BaudRate:=ExtractInteger(DCB, 4, true, 4) DCB_fBitMask:=ExtractInteger(DCB, 8, true, 4) DCB_fBitMaskDec:=DCB_fBitMask DCB_fBitMask:=DecToBin(DCB_fBitMask) StringLeft, DCB_fAbortOnError, DCB_fBitMask, 1 StringMid, DCB_fRtsControl, DCB_fBitMask, 2, 2 StringMid, DCB_fNull, DCB_fBitMask, 4, 1 StringMid, DCB_fErrorChar, DCB_fBitMask, 5, 1 StringMid, DCB_fInX, DCB_fBitMask, 6, 1 StringMid, DCB_fOutX, DCB_fBitMask, 7, 1 StringMid, DCB_fTXContinueOnXoff, DCB_fBitMask, 8, 1 StringMid, DCB_fDsrSensitivity, DCB_fBitMask, 9, 1 StringMid, DCB_fDtrControl, DCB_fBitMask, 10, 2 StringMid, DCB_fOutxDsrFlow, DCB_fBitMask, 12, 1 StringMid, DCB_fOutxCtsFlow, DCB_fBitMask, 13, 1 StringMid, DCB_fParity, DCB_fBitMask, 14, 1 StringRight, DCB_fBinary, DCB_fBitMask, 1 IfEqual, DCB_fDtrControl, 00, SetEnv, DCB_fDtrControl, DTR_CONTROL_DISABLE IfEqual, DCB_fDtrControl, 01, SetEnv, DCB_fDtrControl, DTR_CONTROL_ENABLE IfEqual, DCB_fDtrControl, 10, SetEnv, DCB_fDtrControl, DTR_CONTROL_HANDSHAKE IfEqual, DCB_fRtsControl, 00, SetEnv, DCB_fRtsControl, RTS_CONTROL_DISABLE IfEqual, DCB_fRtsControl, 01, SetEnv, DCB_fRtsControl, RTS_CONTROL_ENABLE IfEqual, DCB_fRtsControl, 10, SetEnv, DCB_fRtsControl, RTS_CONTROL_HANDSHAKE IfEqual, DCB_fRtsControl, 11, SetEnv, DCB_fRtsControl, RTS_CONTROL_TOGGLE DCB_XonLim:=ExtractInteger(DCB, 14, true, 2) DCB_XoffLim:=ExtractInteger(DCB, 16, true, 2) DCB_ByteSize:=ExtractInteger(DCB, 18, true, 1) DCB_Parity:=ExtractInteger(DCB, 19, true, 1) IfEqual, DCB_Parity, 2, SetEnv, DCB_Parity, Even IfEqual, DCB_Parity, 3, SetEnv, DCB_Parity, Mark IfEqual, DCB_Parity, 0, SetEnv, DCB_Parity, None IfEqual, DCB_Parity, 1, SetEnv, DCB_Parity, Odd IfEqual, DCB_Parity, 4, SetEnv, DCB_Parity, Space DCB_StopBits:=ExtractInteger(DCB, 20, true, 1) IfEqual, DCB_StopBits, 2, SetEnv, DCB_StopBits, 2 IfEqual, DCB_StopBits, 1, SetEnv, DCB_StopBits, 1,5 IfEqual, DCB_StopBits, 0, SetEnv, DCB_StopBits, 1 DCB_XonChar:=ExtractInteger(DCB, 21, true, 1) DCB_XoffChar:=ExtractInteger(DCB, 22, true, 1) DCB_ErrorChar:=ExtractInteger(DCB, 23, true, 1) DCB_EofChar:=ExtractInteger(DCB, 24, true, 1) DCB_EvtChar:=ExtractInteger(DCB, 25, true, 1) ch:=DllCall("CloseHandle", "Uint", h) If (ch = 0 or ErrorLevel != 0) return, -3 return, 0 } ;</23.01.000001>
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)