<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.autoitscript.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Therealhanuta</id>
	<title>AutoIt Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.autoitscript.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Therealhanuta"/>
	<link rel="alternate" type="text/html" href="https://www.autoitscript.com/wiki/Special:Contributions/Therealhanuta"/>
	<updated>2026-04-16T12:09:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12376</id>
		<title>CommAPI</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12376"/>
		<updated>2014-04-08T13:31:19Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: /* Changelog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:CommAPI]]CommAPI translates the communications functions of Windows API to AutoIt functions.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
=== Features ===&lt;br /&gt;
* No need to install DLL&#039;s&lt;br /&gt;
* Using Windows API calls (kernel32.dll)&lt;br /&gt;
* Possibility of serial communication (serial port, COM port, RS-232)&lt;br /&gt;
* Possibility of parallel communication (parallel port, LPT port)&lt;br /&gt;
* No use of global variables&lt;br /&gt;
* Uniform namespace _CommAPI_XXX&lt;br /&gt;
* Modular organization into files&lt;br /&gt;
* A lot of additional utility and helper functions&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
* [[CommAPIConstants.au3]]&lt;br /&gt;
* [[CommAPI.au3]]&lt;br /&gt;
* [[CommAPIHelper.au3]]&lt;br /&gt;
* [[CommUtilities.au3]]&lt;br /&gt;
* [[CommInterface.au3]]&lt;br /&gt;
* [[CommObsolete.au3]] (only needed for backward compatibility)&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
[[CommAPI Examples]] shows you some examples. Mayby you could find more examples in [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/?p=1126366 forum].&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
=== History ===&lt;br /&gt;
* 2008-09-12 Creation of cfx.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/#entry578111 (V1.0)]&lt;br /&gt;
* 2011-02-18 Conversation of cfx.au3 into cfxUDF.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry872154 (V2.0)]&lt;br /&gt;
* 2011-02-28 Update V2.0 to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry874547 V2.1]&lt;br /&gt;
* 2011-04-27 Update V2.1 to [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=217993#post217993 V2.2] (german forum)&lt;br /&gt;
* 2013-07-10 Modify V2.1 to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry1094288 V2.1mod]&lt;br /&gt;
* 2013-10-24 Creation of [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ CommAPI.au3]&lt;br /&gt;
&lt;br /&gt;
=== Changelog ===&lt;br /&gt;
; 2014-01-23&lt;br /&gt;
: Small update of method _CommAPI_CreateModeString&lt;br /&gt;
; 2014-02-03&lt;br /&gt;
: Change timeout handling (Attention: not backward compatible)&lt;br /&gt;
: Small update of method _CommAPI_PurgeComm&lt;br /&gt;
; 2014-03-07&lt;br /&gt;
: Rename CommAPIStructures.au3 to CommAPIConstants.au3&lt;br /&gt;
: Replace hex values with Constants&lt;br /&gt;
; 2014-03-27&lt;br /&gt;
: Update of call _WinAPI_CreateFile&lt;br /&gt;
: Updated @error handling&lt;br /&gt;
: New parameter MaxLen for function _CommAPI_ReceiveData&lt;br /&gt;
: New function _CommAPI_ReceiveLine&lt;br /&gt;
: Update existing examples and add new examples&lt;br /&gt;
; 2014-03-31&lt;br /&gt;
: Add constants&lt;br /&gt;
: Fix _CommAPI_WaitCommEvent&lt;br /&gt;
; 2014-04-03&lt;br /&gt;
: Fix reading error Chr(128) to Chr(255)&lt;br /&gt;
: Fix error in _CommAPI_TransmitData&lt;br /&gt;
; 2014-04-04&lt;br /&gt;
: Replace ReceiveData &amp;amp; ReceiveLine with ReceiveBinary &amp;amp; ReceiveString&lt;br /&gt;
; 2014-04-07&lt;br /&gt;
: replace _CommAPI_TransmitData with _CommAPI_TransmitBinary &amp;amp; _CommAPI_TransmitString&lt;br /&gt;
: Create CommObsolete.au3 for backward compatibility&lt;br /&gt;
; 2014-04-08&lt;br /&gt;
: Fix error in _CommAPI_ReceiveBinary&lt;br /&gt;
&lt;br /&gt;
=== Roadmap ===&lt;br /&gt;
There is no roadmap in the moment. Feel free to implement the last five remaining API calls, enhance the scripts or to fix bugs.&lt;br /&gt;
&lt;br /&gt;
=== Support ===&lt;br /&gt;
There is no official support. Try to get help from community in the official forum. [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ Here you can find the main thread].&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx MSDN Library of communications functions]&lt;br /&gt;
* [http://www.hpcc.ecs.soton.ac.uk/software/Win32API.Txt WIN32API.TXT]&lt;br /&gt;
* [[CommAPI#History|cfxUDF.au3]]&lt;br /&gt;
* [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=198669#post198669 GetCOMPorts] (german forum)&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/19713-problem-with-struct/#entry136466 ParseCommState]&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== Implemented API functions ===&lt;br /&gt;
* BuildCommDCB&lt;br /&gt;
* BuildCommDCBAndTimeouts&lt;br /&gt;
* ClearCommBreak&lt;br /&gt;
* ClearCommError&lt;br /&gt;
* EscapeCommFunction&lt;br /&gt;
* GetCommMask&lt;br /&gt;
* GetCommModemStatus&lt;br /&gt;
* GetCommProperties&lt;br /&gt;
* GetCommState&lt;br /&gt;
* GetCommTimeouts&lt;br /&gt;
* PurgeComm&lt;br /&gt;
* SetCommBreak&lt;br /&gt;
* SetCommMask&lt;br /&gt;
* SetCommState&lt;br /&gt;
* SetCommTimeouts&lt;br /&gt;
* SetupComm&lt;br /&gt;
* TransmitCommChar&lt;br /&gt;
* WaitCommEvent&lt;br /&gt;
&lt;br /&gt;
=== Unimplemented API functions ===&lt;br /&gt;
* CommConfigDialog&lt;br /&gt;
* GetCommConfig&lt;br /&gt;
* GetDefaultCommConfig&lt;br /&gt;
* SetCommConfig&lt;br /&gt;
* SetDefaultCommConfig&lt;br /&gt;
&lt;br /&gt;
=== API helper functions ===&lt;br /&gt;
* ChangeCommStateElement&lt;br /&gt;
* ChangeCommTimeoutsElement&lt;br /&gt;
* GetCommStateElement&lt;br /&gt;
* GetCommTimeoutsElement&lt;br /&gt;
* IsOnCTS&lt;br /&gt;
* IsOnDCD&lt;br /&gt;
* IsOnDSR&lt;br /&gt;
* IsOnRI&lt;br /&gt;
* SetCommStateElement&lt;br /&gt;
* SetCommTimeoutsElement&lt;br /&gt;
* SetOnDTR&lt;br /&gt;
* SetOnRTS&lt;br /&gt;
&lt;br /&gt;
=== Utility functions ===&lt;br /&gt;
* CommStateToString&lt;br /&gt;
* CommTimeoutsToString&lt;br /&gt;
* CreateModeString&lt;br /&gt;
* GetCOMPorts&lt;br /&gt;
&lt;br /&gt;
=== Interface functions ===&lt;br /&gt;
* ClosePort&lt;br /&gt;
* OpenCOMPort&lt;br /&gt;
* OpenPort&lt;br /&gt;
* ReceiveBinary&lt;br /&gt;
* ReceiveString&lt;br /&gt;
* TransmitBinary&lt;br /&gt;
* TransmitString&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12375</id>
		<title>CommInterface.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12375"/>
		<updated>2014-04-08T13:30:37Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: fix error in _CommAPI_ReceiveBinary&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:CommAPI]][[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommInterface.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-04-08&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPIHelper.au3&amp;quot;&lt;br /&gt;
#include &amp;quot;CommUtilities.au3&amp;quot;&lt;br /&gt;
#include &amp;lt;WinAPI.au3&amp;gt;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClosePort&lt;br /&gt;
; Description ...: CLoses a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
	Local $fSuccess = _WinAPI_CloseHandle($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, 0, False)&lt;br /&gt;
	If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return $fSuccess&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClosePort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenCOMPort&lt;br /&gt;
; Description ...: Opens a COM Port.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenCOMPort(Const $iPort[, $iBaudRate = Default[, $iParity = Default[, $iByteSize = Default[,&lt;br /&gt;
;                  $iStopBits = Default]]]])&lt;br /&gt;
; Parameters ....: $iPort               - [in] A port number.&lt;br /&gt;
;                  $iBaudRate           - [in] The baud rate at which the communications device operates.&lt;br /&gt;
;                  $iParity             - [in] The parity scheme to be used.&lt;br /&gt;
;                  $iByteSize           - [in] Specifies the number of data bits in a character.&lt;br /&gt;
;                  $iStopBits           - [in] Specifies the number of stop bits that define the end of a character: 1, 1.5, or 2.&lt;br /&gt;
; Return values .: Success - Open handle to a specified communications device&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                            11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort, _CommAPI_ClosePort, _CommAPI_CreateModeString&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenCOMPort(Const $iPort, Const $iBaudRate = Default, Const $iParity = Default, Const $iByteSize = Default, Const $iStopBits = Default)&lt;br /&gt;
	Local $sMode = _CommAPI_CreateModeString($iPort, $iBaudRate, $iParity, $iByteSize, $iStopBits)&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($sMode)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenCOMPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenPort&lt;br /&gt;
; Description ...: Opens a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
; Return values .: Success - Open handle to a specified communications device&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                            11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenCOMPort, _CommAPI_ClosePort, _CommAPI_SetCommState&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365430(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
	Local $sFileName = &amp;quot;\\.\&amp;quot; &amp;amp; StringLeft($sMode, StringInStr($sMode, &amp;quot;:&amp;quot;) - 1)&lt;br /&gt;
	Local $hFile = _WinAPI_CreateFile($sFileName, 3, 6)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If $hFile &amp;lt;= 0 Then Return SetError(-1, @ScriptLineNumber, 0)&lt;br /&gt;
&lt;br /&gt;
	Local $tDCB = DllStructCreate($tagDCB)&lt;br /&gt;
	Local $tCommTimeouts = DllStructCreate($tagCOMMTIMEOUTS)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_BuildCommDCB($sMode, $tDCB)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;ReadTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;WriteTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	If Not _CommAPI_SetCommState($hFile, $tDCB) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	If Not _CommAPI_SetCommTimeouts($hFile, $tCommTimeouts) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveBinary&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveBinary(Const $hFile[, $iTimeout = 1[, $iMaxLength = 0[, $vSeparator = &amp;quot;&amp;quot;]]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLength          - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $vSeparator          - [in] A value which is used as a separator.&lt;br /&gt;
;                                              Is activated only by non-empty values.&lt;br /&gt;
; Return values .: Success - Received binary data&lt;br /&gt;
;                  Failure - Received binary data&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveString, _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveBinary(Const $hFile, Const $iTimeout = 1, Const $iMaxLength = 0, Const $vSeparator = &amp;quot;&amp;quot;)&lt;br /&gt;
	Local $bSeparator = Binary($vSeparator)&lt;br /&gt;
	Local $iSepLength = BinaryLen($bSeparator)&lt;br /&gt;
	Local $fSuccess = False&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;BYTE&amp;quot;)&lt;br /&gt;
	Local $pBuffer = DllStructGetPtr($tBuffer)&lt;br /&gt;
	Local $iRead = 0&lt;br /&gt;
	Local $bResult = Binary(&amp;quot;&amp;quot;)&lt;br /&gt;
	Local $iResLength = 0&lt;br /&gt;
	Local $hTimer = TimerInit()&lt;br /&gt;
	While True&lt;br /&gt;
		$fSuccess = _WinAPI_ReadFile($hFile, $pBuffer, 1, $iRead)&lt;br /&gt;
		If @error Then Return SetError(@error, @ScriptLineNumber, $bResult)&lt;br /&gt;
		If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, $bResult)&lt;br /&gt;
		If $iRead Then&lt;br /&gt;
			$bResult &amp;amp;= BinaryMid(Binary(DllStructGetData($tBuffer, 1)), 1, 1)&lt;br /&gt;
			$iResLength = BinaryLen($bResult)&lt;br /&gt;
			If $iMaxLength And $iResLength = $iMaxLength Then Return $bResult&lt;br /&gt;
			If $iSepLength And $bSeparator = BinaryMid($bResult, 1 + $iResLength - $iSepLength) Then Return BinaryMid($bResult, 1, $iResLength - $iSepLength)&lt;br /&gt;
		Else&lt;br /&gt;
			If $bResult And Not $iSepLength Then Return $bResult&lt;br /&gt;
			If $iTimeout And $iTimeout &amp;lt; TimerDiff($hTimer) Then Return SetError(-2, @ScriptLineNumber, $bResult)&lt;br /&gt;
		EndIf&lt;br /&gt;
	WEnd&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ReceiveBinary&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveString&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveString(Const $hFile[, $iTimeout = 1[, $iMaxLength = 0[, $sSeparator = &amp;quot;&amp;quot;]]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLength          - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $sSeparator          - [in] A value which is used as a separator.&lt;br /&gt;
;                                              Is activated only by non-empty values.&lt;br /&gt;
;                  $iFlag               - [in] Flag for function BinaryToString().&lt;br /&gt;
; Return values .: Success - Received string&lt;br /&gt;
;                  Failure - Received string&lt;br /&gt;
;                            Received binary data in case of @error = -3&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
;                           -3 error in BinaryToString&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveBinary, _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveString(Const $hFile, Const $iTimeout = 1, Const $iMaxLength = 0, Const $sSeparator = &amp;quot;&amp;quot;, Const $iFlag = 1)&lt;br /&gt;
	Local $bResult = _CommAPI_ReceiveBinary($hFile, $iTimeout, $iMaxLength, StringToBinary($sSeparator, $iFlag))&lt;br /&gt;
	Local $iError = @error&lt;br /&gt;
	Local $iExtended = @extended&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	If $bResult Then&lt;br /&gt;
		$sResult = BinaryToString($bResult, $iFlag)&lt;br /&gt;
		If @error Then SetError(-3, @ScriptLineNumber, $bResult)&lt;br /&gt;
	EndIf&lt;br /&gt;
	Return SetError($iError, $iExtended, $sResult)&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ReceiveString&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitBinary&lt;br /&gt;
; Description ...: Transmits data (TxD/TX/TD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $vData               - [in] A binary value to transmit.&lt;br /&gt;
; Return values .: Success - Number of written bytes&lt;br /&gt;
;                  Failure - Number of written bytes&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_TransmitString, _CommAPI_ReceiveBinary&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitBinary(Const $hFile, Const $vData)&lt;br /&gt;
	Local $bData = Binary($vData)&lt;br /&gt;
	Local $iLength = BinaryLen($vData)&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;BYTE[&amp;quot; &amp;amp; $iLength &amp;amp; &amp;quot;]&amp;quot;)&lt;br /&gt;
	DllStructSetData($tBuffer, 1, $bData)&lt;br /&gt;
	Local $fSuccess = _WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), $iLength, $iWritten)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, $iWritten)&lt;br /&gt;
	Return $iWritten&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_TransmitBinary&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitString&lt;br /&gt;
; Description ...: Transmits data (TxD/TX/TD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sData               - [in] A string value to transmit.&lt;br /&gt;
;                  $iFlag               - [in] Flag for function StringToBinary().&lt;br /&gt;
; Return values .: Success - Number of written bytes&lt;br /&gt;
;                  Failure - Number of written bytes&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_TransmitBinary, _CommAPI_ReceiveString&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitString(Const $hFile, Const $sData, Const $iFlag = 1)&lt;br /&gt;
	Local $iWritten = _CommAPI_TransmitBinary($hFile, StringToBinary($sData, $iFlag))&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, $iWritten)&lt;br /&gt;
	Return $iWritten&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12374</id>
		<title>CommInterface.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12374"/>
		<updated>2014-04-07T11:18:58Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:CommAPI]][[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommInterface.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-04-07&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPIHelper.au3&amp;quot;&lt;br /&gt;
#include &amp;quot;CommUtilities.au3&amp;quot;&lt;br /&gt;
#include &amp;lt;WinAPI.au3&amp;gt;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClosePort&lt;br /&gt;
; Description ...: CLoses a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
	Local $fSuccess = _WinAPI_CloseHandle($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, 0, False)&lt;br /&gt;
	If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return $fSuccess&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClosePort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenCOMPort&lt;br /&gt;
; Description ...: Opens a COM Port.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenCOMPort(Const $iPort[, $iBaudRate = Default[, $iParity = Default[, $iByteSize = Default[,&lt;br /&gt;
;                  $iStopBits = Default]]]])&lt;br /&gt;
; Parameters ....: $iPort               - [in] A port number.&lt;br /&gt;
;                  $iBaudRate           - [in] The baud rate at which the communications device operates.&lt;br /&gt;
;                  $iParity             - [in] The parity scheme to be used.&lt;br /&gt;
;                  $iByteSize           - [in] Specifies the number of data bits in a character.&lt;br /&gt;
;                  $iStopBits           - [in] Specifies the number of stop bits that define the end of a character: 1, 1.5, or 2.&lt;br /&gt;
; Return values .: Success - Open handle to a specified communications device&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                            11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort, _CommAPI_ClosePort, _CommAPI_CreateModeString&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenCOMPort(Const $iPort, Const $iBaudRate = Default, Const $iParity = Default, Const $iByteSize = Default, Const $iStopBits = Default)&lt;br /&gt;
	Local $sMode = _CommAPI_CreateModeString($iPort, $iBaudRate, $iParity, $iByteSize, $iStopBits)&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($sMode)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenCOMPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenPort&lt;br /&gt;
; Description ...: Opens a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
; Return values .: Success - Open handle to a specified communications device&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                            11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenCOMPort, _CommAPI_ClosePort, _CommAPI_SetCommState&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365430(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
	Local $sFileName = &amp;quot;\\.\&amp;quot; &amp;amp; StringLeft($sMode, StringInStr($sMode, &amp;quot;:&amp;quot;) - 1)&lt;br /&gt;
	Local $hFile = _WinAPI_CreateFile($sFileName, 3, 6)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If $hFile &amp;lt;= 0 Then Return SetError(-1, @ScriptLineNumber, 0)&lt;br /&gt;
&lt;br /&gt;
	Local $tDCB = DllStructCreate($tagDCB)&lt;br /&gt;
	Local $tCommTimeouts = DllStructCreate($tagCOMMTIMEOUTS)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_BuildCommDCB($sMode, $tDCB)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;ReadTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;WriteTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	If Not _CommAPI_SetCommState($hFile, $tDCB) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	If Not _CommAPI_SetCommTimeouts($hFile, $tCommTimeouts) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveBinary&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveBinary(Const $hFile[, $iTimeout = 1[, $iMaxLength = 0[, $vSeparator = &amp;quot;&amp;quot;]]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLength          - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $vSeparator          - [in] A value which is used as a separator.&lt;br /&gt;
;                                              Is activated only by non-empty values.&lt;br /&gt;
; Return values .: Success - Received binary data&lt;br /&gt;
;                  Failure - Received binary data&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveString, _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveBinary(Const $hFile, Const $iTimeout = 1, Const $iMaxLength = 0, Const $vSeparator = &amp;quot;&amp;quot;)&lt;br /&gt;
	Local $bSeparator = Binary($vSeparator)&lt;br /&gt;
	Local $iSepLength = BinaryLen($bSeparator)&lt;br /&gt;
	Local $fSuccess = False&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;BYTE&amp;quot;)&lt;br /&gt;
	Local $pBuffer = DllStructGetPtr($tBuffer)&lt;br /&gt;
	Local $iRead = 0&lt;br /&gt;
	Local $bResult = Binary(&amp;quot;&amp;quot;)&lt;br /&gt;
	Local $iResLength = 0&lt;br /&gt;
	Local $hTimer = TimerInit()&lt;br /&gt;
	While True&lt;br /&gt;
		$fSuccess = _WinAPI_ReadFile($hFile, $pBuffer, 1, $iRead)&lt;br /&gt;
		If @error Then Return SetError(@error, @ScriptLineNumber, $bResult)&lt;br /&gt;
		If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, $bResult)&lt;br /&gt;
		If $iRead Then&lt;br /&gt;
			$bResult &amp;amp;= BinaryMid(Binary(DllStructGetData($tBuffer, 1)), 1, 1)&lt;br /&gt;
			$iResLength = BinaryLen($bResult)&lt;br /&gt;
			If $iResLength = $iMaxLength And $iMaxLength &amp;gt; 0 Then Return $bResult&lt;br /&gt;
			If $bSeparator = BinaryMid($bResult, 1 + $iResLength - $iSepLength) Then Return BinaryMid($bResult, 1, $iResLength - $iSepLength)&lt;br /&gt;
		Else&lt;br /&gt;
			If $bResult And Not $iSepLength Then Return $bResult&lt;br /&gt;
			If $iTimeout &amp;gt; 0 And $iTimeout &amp;lt; TimerDiff($hTimer) Then Return SetError(-2, @ScriptLineNumber, $bResult)&lt;br /&gt;
		EndIf&lt;br /&gt;
	WEnd&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ReceiveBinary&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveString&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveString(Const $hFile[, $iTimeout = 1[, $iMaxLength = 0[, $sSeparator = &amp;quot;&amp;quot;]]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLength          - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $sSeparator          - [in] A value which is used as a separator.&lt;br /&gt;
;                                              Is activated only by non-empty values.&lt;br /&gt;
;                  $iFlag               - [in] Flag for function BinaryToString().&lt;br /&gt;
; Return values .: Success - Received string&lt;br /&gt;
;                  Failure - Received string&lt;br /&gt;
;                            Received binary data in case of @error = -3&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
;                           -3 error in BinaryToString&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveBinary, _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveString(Const $hFile, Const $iTimeout = 1, Const $iMaxLength = 0, Const $sSeparator = &amp;quot;&amp;quot;, Const $iFlag = 1)&lt;br /&gt;
	Local $bResult = _CommAPI_ReceiveBinary($hFile, $iTimeout, $iMaxLength, StringToBinary($sSeparator, $iFlag))&lt;br /&gt;
	Local $iError = @error&lt;br /&gt;
	Local $iExtended = @extended&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	If $bResult Then&lt;br /&gt;
		$sResult = BinaryToString($bResult, $iFlag)&lt;br /&gt;
		If @error Then SetError(-3, @ScriptLineNumber, $bResult)&lt;br /&gt;
	EndIf&lt;br /&gt;
	Return SetError($iError, $iExtended, $sResult)&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ReceiveString&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitBinary&lt;br /&gt;
; Description ...: Transmits data (TxD/TX/TD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $vData               - [in] A binary value to transmit.&lt;br /&gt;
; Return values .: Success - Number of written bytes&lt;br /&gt;
;                  Failure - Number of written bytes&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_TransmitString, _CommAPI_ReceiveBinary&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitBinary(Const $hFile, Const $vData)&lt;br /&gt;
	Local $bData = Binary($vData)&lt;br /&gt;
	Local $iLength = BinaryLen($vData)&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;BYTE[&amp;quot; &amp;amp; $iLength &amp;amp; &amp;quot;]&amp;quot;)&lt;br /&gt;
	DllStructSetData($tBuffer, 1, $bData)&lt;br /&gt;
	Local $fSuccess = _WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), $iLength, $iWritten)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, $iWritten)&lt;br /&gt;
	Return $iWritten&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_TransmitBinary&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitString&lt;br /&gt;
; Description ...: Transmits data (TxD/TX/TD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sData               - [in] A string value to transmit.&lt;br /&gt;
;                  $iFlag               - [in] Flag for function StringToBinary().&lt;br /&gt;
; Return values .: Success - Number of written bytes&lt;br /&gt;
;                  Failure - Number of written bytes&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_TransmitBinary, _CommAPI_ReceiveString&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitString(Const $hFile, Const $sData, Const $iFlag = 1)&lt;br /&gt;
	Local $iWritten = _CommAPI_TransmitBinary($hFile, StringToBinary($sData, $iFlag))&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, $iWritten)&lt;br /&gt;
	Return $iWritten&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=Category:CommAPI&amp;diff=12373</id>
		<title>Category:CommAPI</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=Category:CommAPI&amp;diff=12373"/>
		<updated>2014-04-07T11:13:49Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[CommAPI]] translates the communications functions of Windows API to AutoIt functions.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
* No need to install DLL&#039;s&lt;br /&gt;
* Using Windows API calls (kernel32.dll)&lt;br /&gt;
* Possibility of serial communication (serial port, COM port, RS-232)&lt;br /&gt;
* Possibility of parallel communication (parallel port, LPT port)&lt;br /&gt;
* No use of global variables&lt;br /&gt;
* Uniform namespace _CommAPI_XXX&lt;br /&gt;
* Modular organization into files&lt;br /&gt;
* A lot of additional utility and helper functions&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12372</id>
		<title>CommAPI</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12372"/>
		<updated>2014-04-07T11:13:26Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:CommAPI]]CommAPI translates the communications functions of Windows API to AutoIt functions.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
=== Features ===&lt;br /&gt;
* No need to install DLL&#039;s&lt;br /&gt;
* Using Windows API calls (kernel32.dll)&lt;br /&gt;
* Possibility of serial communication (serial port, COM port, RS-232)&lt;br /&gt;
* Possibility of parallel communication (parallel port, LPT port)&lt;br /&gt;
* No use of global variables&lt;br /&gt;
* Uniform namespace _CommAPI_XXX&lt;br /&gt;
* Modular organization into files&lt;br /&gt;
* A lot of additional utility and helper functions&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
* [[CommAPIConstants.au3]]&lt;br /&gt;
* [[CommAPI.au3]]&lt;br /&gt;
* [[CommAPIHelper.au3]]&lt;br /&gt;
* [[CommUtilities.au3]]&lt;br /&gt;
* [[CommInterface.au3]]&lt;br /&gt;
* [[CommObsolete.au3]] (only needed for backward compatibility)&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
[[CommAPI Examples]] shows you some examples. Mayby you could find more examples in [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/?p=1126366 forum].&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
=== History ===&lt;br /&gt;
* 2008-09-12 Creation of cfx.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/#entry578111 (V1.0)]&lt;br /&gt;
* 2011-02-18 Conversation of cfx.au3 into cfxUDF.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry872154 (V2.0)]&lt;br /&gt;
* 2011-02-28 Update V2.0 to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry874547 V2.1]&lt;br /&gt;
* 2011-04-27 Update V2.1 to [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=217993#post217993 V2.2] (german forum)&lt;br /&gt;
* 2013-07-10 Modify V2.1 to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry1094288 V2.1mod]&lt;br /&gt;
* 2013-10-24 Creation of [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ CommAPI.au3]&lt;br /&gt;
&lt;br /&gt;
=== Changelog ===&lt;br /&gt;
; 2014-01-23&lt;br /&gt;
: Small update of method _CommAPI_CreateModeString&lt;br /&gt;
; 2014-02-03&lt;br /&gt;
: Change timeout handling (Attention: not backward compatible)&lt;br /&gt;
: Small update of method _CommAPI_PurgeComm&lt;br /&gt;
; 2014-03-07&lt;br /&gt;
: Rename CommAPIStructures.au3 to CommAPIConstants.au3&lt;br /&gt;
: Replace hex values with Constants&lt;br /&gt;
; 2014-03-27&lt;br /&gt;
: Update of call _WinAPI_CreateFile&lt;br /&gt;
: Updated @error handling&lt;br /&gt;
: New parameter MaxLen for function _CommAPI_ReceiveData&lt;br /&gt;
: New function _CommAPI_ReceiveLine&lt;br /&gt;
: Update existing examples and add new examples&lt;br /&gt;
; 2014-03-31&lt;br /&gt;
: Add constants&lt;br /&gt;
: Fix _CommAPI_WaitCommEvent&lt;br /&gt;
; 2014-04-03&lt;br /&gt;
: Fix reading error Chr(128) to Chr(255)&lt;br /&gt;
: Fix error in _CommAPI_TransmitData&lt;br /&gt;
; 2014-04-04&lt;br /&gt;
: Replace ReceiveData &amp;amp; ReceiveLine with ReceiveBinary &amp;amp; ReceiveString&lt;br /&gt;
; 2014-04-07&lt;br /&gt;
: replace _CommAPI_TransmitData with _CommAPI_TransmitBinary &amp;amp; _CommAPI_TransmitString&lt;br /&gt;
: Create CommObsolete.au3 for backward compatibility&lt;br /&gt;
&lt;br /&gt;
=== Roadmap ===&lt;br /&gt;
There is no roadmap in the moment. Feel free to implement the last five remaining API calls, enhance the scripts or to fix bugs.&lt;br /&gt;
&lt;br /&gt;
=== Support ===&lt;br /&gt;
There is no official support. Try to get help from community in the official forum. [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ Here you can find the main thread].&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx MSDN Library of communications functions]&lt;br /&gt;
* [http://www.hpcc.ecs.soton.ac.uk/software/Win32API.Txt WIN32API.TXT]&lt;br /&gt;
* [[CommAPI#History|cfxUDF.au3]]&lt;br /&gt;
* [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=198669#post198669 GetCOMPorts] (german forum)&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/19713-problem-with-struct/#entry136466 ParseCommState]&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== Implemented API functions ===&lt;br /&gt;
* BuildCommDCB&lt;br /&gt;
* BuildCommDCBAndTimeouts&lt;br /&gt;
* ClearCommBreak&lt;br /&gt;
* ClearCommError&lt;br /&gt;
* EscapeCommFunction&lt;br /&gt;
* GetCommMask&lt;br /&gt;
* GetCommModemStatus&lt;br /&gt;
* GetCommProperties&lt;br /&gt;
* GetCommState&lt;br /&gt;
* GetCommTimeouts&lt;br /&gt;
* PurgeComm&lt;br /&gt;
* SetCommBreak&lt;br /&gt;
* SetCommMask&lt;br /&gt;
* SetCommState&lt;br /&gt;
* SetCommTimeouts&lt;br /&gt;
* SetupComm&lt;br /&gt;
* TransmitCommChar&lt;br /&gt;
* WaitCommEvent&lt;br /&gt;
&lt;br /&gt;
=== Unimplemented API functions ===&lt;br /&gt;
* CommConfigDialog&lt;br /&gt;
* GetCommConfig&lt;br /&gt;
* GetDefaultCommConfig&lt;br /&gt;
* SetCommConfig&lt;br /&gt;
* SetDefaultCommConfig&lt;br /&gt;
&lt;br /&gt;
=== API helper functions ===&lt;br /&gt;
* ChangeCommStateElement&lt;br /&gt;
* ChangeCommTimeoutsElement&lt;br /&gt;
* GetCommStateElement&lt;br /&gt;
* GetCommTimeoutsElement&lt;br /&gt;
* IsOnCTS&lt;br /&gt;
* IsOnDCD&lt;br /&gt;
* IsOnDSR&lt;br /&gt;
* IsOnRI&lt;br /&gt;
* SetCommStateElement&lt;br /&gt;
* SetCommTimeoutsElement&lt;br /&gt;
* SetOnDTR&lt;br /&gt;
* SetOnRTS&lt;br /&gt;
&lt;br /&gt;
=== Utility functions ===&lt;br /&gt;
* CommStateToString&lt;br /&gt;
* CommTimeoutsToString&lt;br /&gt;
* CreateModeString&lt;br /&gt;
* GetCOMPorts&lt;br /&gt;
&lt;br /&gt;
=== Interface functions ===&lt;br /&gt;
* ClosePort&lt;br /&gt;
* OpenCOMPort&lt;br /&gt;
* OpenPort&lt;br /&gt;
* ReceiveBinary&lt;br /&gt;
* ReceiveString&lt;br /&gt;
* TransmitBinary&lt;br /&gt;
* TransmitString&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=Category:CommAPI&amp;diff=12371</id>
		<title>Category:CommAPI</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=Category:CommAPI&amp;diff=12371"/>
		<updated>2014-04-07T11:05:44Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: Created page with &amp;quot;CommAPI translates the communications functions of Windows API to AutoIt functions.  == Features == * No need to install DLL&amp;#039;s * Using Windows API calls (kernel32.dll) * Possi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CommAPI translates the communications functions of Windows API to AutoIt functions.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
* No need to install DLL&#039;s&lt;br /&gt;
* Using Windows API calls (kernel32.dll)&lt;br /&gt;
* Possibility of serial communication (serial port, COM port, RS-232)&lt;br /&gt;
* Possibility of parallel communication (parallel port, LPT port)&lt;br /&gt;
* No use of global variables&lt;br /&gt;
* Uniform namespace _CommAPI_XXX&lt;br /&gt;
* Modular organization into files&lt;br /&gt;
* A lot of additional utility and helper functions&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI_Examples&amp;diff=12370</id>
		<title>CommAPI Examples</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI_Examples&amp;diff=12370"/>
		<updated>2014-04-07T11:02:51Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:CommAPI]][[Category:Samples]]&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This site shows you some examples for [[CommAPI]].&lt;br /&gt;
You will also need the following snippet for all examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;CommInterface.au3&amp;quot;&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
Main()&lt;br /&gt;
&lt;br /&gt;
Func Main()&lt;br /&gt;
	Local $sResult = Example()&lt;br /&gt;
	Switch @error&lt;br /&gt;
		Case 0&lt;br /&gt;
			MsgBox(64, &amp;quot;Result&amp;quot;, $sResult)&lt;br /&gt;
		Case -1&lt;br /&gt;
			MsgBox(32, &amp;quot;Error&amp;quot;, _WinAPI_GetLastErrorMessage())&lt;br /&gt;
		Case -2&lt;br /&gt;
			MsgBox(32, &amp;quot;Timeout&amp;quot;, $sResult)&lt;br /&gt;
		Case Else&lt;br /&gt;
			MsgBox(32, &amp;quot;Error&amp;quot;, &amp;quot;Error &amp;quot; &amp;amp; @error &amp;amp; &amp;quot; in line &amp;quot; &amp;amp; @extended)&lt;br /&gt;
	EndSwitch&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First example ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local Const $iPort = 1&lt;br /&gt;
	Local Const $iBaud = 9600&lt;br /&gt;
	Local Const $iParity = 0&lt;br /&gt;
	Local Const $iByteSize = 8&lt;br /&gt;
	Local Const $iStopBits = 1&lt;br /&gt;
	Local Const $sCommand = &amp;quot;Command&amp;quot; &amp;amp; @CRLF&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenCOMPort($iPort, $iBaud, $iParity, $iByteSize, $iStopBits)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitString($hFile, $sCommand)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveString($hFile, 5000)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INI file==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local Const $sFileINI = @ScriptDir &amp;amp; &amp;quot;\Example.ini&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	Local $sMode = _CommAPI_CreateModeString( _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;SerialPort&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;BaudRate&amp;quot;, 9600), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;Parity&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;ByteSize&amp;quot;, 8), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;StopBits&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;XON&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;DSR&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;CTS&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;DTR&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;RTS&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;IDSR&amp;quot;, 0))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($sMode)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitString($hFile, IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;Command&amp;quot;, &amp;quot;Command&amp;quot; &amp;amp; @CRLF))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveString($hFile, IniRead($sFileINI, &amp;quot;Timeout&amp;quot;, &amp;quot;IDSR&amp;quot;, 5000))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command Line ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	If $CmdLine[0] &amp;lt;&amp;gt; 2 Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Syntax&amp;quot;, @ScriptName &amp;amp; &#039; &amp;quot;ModeString&amp;quot; &amp;quot;Command&amp;quot;&#039;)&lt;br /&gt;
		Exit&lt;br /&gt;
	EndIf&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($CmdLine[1])&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitString($hFile, $CmdLine[2])&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveString($hFile, 5000)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;winbatch&amp;quot;&amp;gt;&lt;br /&gt;
@echo off&lt;br /&gt;
cls&lt;br /&gt;
chcp 1252&amp;gt;nul&lt;br /&gt;
cd /d &amp;quot;%~dp0&amp;quot;&lt;br /&gt;
start Example.exe &amp;quot;COM1: BAUD=9600 PARITY=N DATA=8 STOP=1 XON=OFF ODSR=OFF OCTS=ON DTR=ON RTS=ON IDSR=OFF&amp;quot; &amp;quot;Command&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Separator ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local $hFile = _CommAPI_OpenCOMPort(1, 9600, 0, 8, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	While True&lt;br /&gt;
		$sResult = _CommAPI_ReceiveString($hFile, 5000, 0, &amp;quot;&amp;lt;CR&amp;gt;&amp;quot;)&lt;br /&gt;
		If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
		MsgBox(64, &amp;quot;Line&amp;quot;, $sResult)&lt;br /&gt;
	WEnd&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Slow Devices ==&lt;br /&gt;
For some slow devices the default timeout is too small of one millisecond.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local $hFile = _CommAPI_OpenCOMPort(1, 9600, 0, 8, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ChangeCommTimeoutsElement($hFile, &amp;quot;ReadTotalTimeoutMultiplier&amp;quot;, 100)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveString($hFile, 5000)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI_Examples&amp;diff=12369</id>
		<title>CommAPI Examples</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI_Examples&amp;diff=12369"/>
		<updated>2014-04-07T11:02:41Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:CommAPI]][[Category:Samples]]== Introduction ==&lt;br /&gt;
This site shows you some examples for [[CommAPI]].&lt;br /&gt;
You will also need the following snippet for all examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;CommInterface.au3&amp;quot;&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
Main()&lt;br /&gt;
&lt;br /&gt;
Func Main()&lt;br /&gt;
	Local $sResult = Example()&lt;br /&gt;
	Switch @error&lt;br /&gt;
		Case 0&lt;br /&gt;
			MsgBox(64, &amp;quot;Result&amp;quot;, $sResult)&lt;br /&gt;
		Case -1&lt;br /&gt;
			MsgBox(32, &amp;quot;Error&amp;quot;, _WinAPI_GetLastErrorMessage())&lt;br /&gt;
		Case -2&lt;br /&gt;
			MsgBox(32, &amp;quot;Timeout&amp;quot;, $sResult)&lt;br /&gt;
		Case Else&lt;br /&gt;
			MsgBox(32, &amp;quot;Error&amp;quot;, &amp;quot;Error &amp;quot; &amp;amp; @error &amp;amp; &amp;quot; in line &amp;quot; &amp;amp; @extended)&lt;br /&gt;
	EndSwitch&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First example ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local Const $iPort = 1&lt;br /&gt;
	Local Const $iBaud = 9600&lt;br /&gt;
	Local Const $iParity = 0&lt;br /&gt;
	Local Const $iByteSize = 8&lt;br /&gt;
	Local Const $iStopBits = 1&lt;br /&gt;
	Local Const $sCommand = &amp;quot;Command&amp;quot; &amp;amp; @CRLF&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenCOMPort($iPort, $iBaud, $iParity, $iByteSize, $iStopBits)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitString($hFile, $sCommand)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveString($hFile, 5000)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INI file==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local Const $sFileINI = @ScriptDir &amp;amp; &amp;quot;\Example.ini&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	Local $sMode = _CommAPI_CreateModeString( _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;SerialPort&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;BaudRate&amp;quot;, 9600), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;Parity&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;ByteSize&amp;quot;, 8), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;StopBits&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;XON&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;DSR&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;CTS&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;DTR&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;RTS&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;IDSR&amp;quot;, 0))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($sMode)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitString($hFile, IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;Command&amp;quot;, &amp;quot;Command&amp;quot; &amp;amp; @CRLF))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveString($hFile, IniRead($sFileINI, &amp;quot;Timeout&amp;quot;, &amp;quot;IDSR&amp;quot;, 5000))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command Line ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	If $CmdLine[0] &amp;lt;&amp;gt; 2 Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Syntax&amp;quot;, @ScriptName &amp;amp; &#039; &amp;quot;ModeString&amp;quot; &amp;quot;Command&amp;quot;&#039;)&lt;br /&gt;
		Exit&lt;br /&gt;
	EndIf&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($CmdLine[1])&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitString($hFile, $CmdLine[2])&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveString($hFile, 5000)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;winbatch&amp;quot;&amp;gt;&lt;br /&gt;
@echo off&lt;br /&gt;
cls&lt;br /&gt;
chcp 1252&amp;gt;nul&lt;br /&gt;
cd /d &amp;quot;%~dp0&amp;quot;&lt;br /&gt;
start Example.exe &amp;quot;COM1: BAUD=9600 PARITY=N DATA=8 STOP=1 XON=OFF ODSR=OFF OCTS=ON DTR=ON RTS=ON IDSR=OFF&amp;quot; &amp;quot;Command&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Separator ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local $hFile = _CommAPI_OpenCOMPort(1, 9600, 0, 8, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	While True&lt;br /&gt;
		$sResult = _CommAPI_ReceiveString($hFile, 5000, 0, &amp;quot;&amp;lt;CR&amp;gt;&amp;quot;)&lt;br /&gt;
		If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
		MsgBox(64, &amp;quot;Line&amp;quot;, $sResult)&lt;br /&gt;
	WEnd&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Slow Devices ==&lt;br /&gt;
For some slow devices the default timeout is too small of one millisecond.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local $hFile = _CommAPI_OpenCOMPort(1, 9600, 0, 8, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ChangeCommTimeoutsElement($hFile, &amp;quot;ReadTotalTimeoutMultiplier&amp;quot;, 100)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveString($hFile, 5000)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12368</id>
		<title>CommInterface.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12368"/>
		<updated>2014-04-07T11:01:50Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:CommAPI]][[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommInterface.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-04-07&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPIHelper.au3&amp;quot;&lt;br /&gt;
#include &amp;quot;CommUtilities.au3&amp;quot;&lt;br /&gt;
#include &amp;lt;WinAPI.au3&amp;gt;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClosePort&lt;br /&gt;
; Description ...: CLoses a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
	Local $fSuccess = _WinAPI_CloseHandle($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, 0, False)&lt;br /&gt;
	If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return $fSuccess&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClosePort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenCOMPort&lt;br /&gt;
; Description ...: Opens a COM Port.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenCOMPort(Const $iPort[, $iBaudRate = Default[, $iParity = Default[, $iByteSize = Default[,&lt;br /&gt;
;                  $iStopBits = Default]]]])&lt;br /&gt;
; Parameters ....: $iPort               - [in] A port number.&lt;br /&gt;
;                  $iBaudRate           - [in] The baud rate at which the communications device operates.&lt;br /&gt;
;                  $iParity             - [in] The parity scheme to be used.&lt;br /&gt;
;                  $iByteSize           - [in] Specifies the number of data bits in a character.&lt;br /&gt;
;                  $iStopBits           - [in] Specifies the number of stop bits that define the end of a character: 1, 1.5, or 2.&lt;br /&gt;
; Return values .: Success - Open handle to a specified communications device&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                            11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort, _CommAPI_ClosePort, _CommAPI_CreateModeString&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenCOMPort(Const $iPort, Const $iBaudRate = Default, Const $iParity = Default, Const $iByteSize = Default, Const $iStopBits = Default)&lt;br /&gt;
	Local $sMode = _CommAPI_CreateModeString($iPort, $iBaudRate, $iParity, $iByteSize, $iStopBits)&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($sMode)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenCOMPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenPort&lt;br /&gt;
; Description ...: Opens a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
; Return values .: Success - Open handle to a specified communications device&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                            11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenCOMPort, _CommAPI_ClosePort, _CommAPI_SetCommState&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365430(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
	Local $sFileName = &amp;quot;\\.\&amp;quot; &amp;amp; StringLeft($sMode, StringInStr($sMode, &amp;quot;:&amp;quot;) - 1)&lt;br /&gt;
	Local $hFile = _WinAPI_CreateFile($sFileName, 3, 6)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If $hFile &amp;lt;= 0 Then Return SetError(-1, @ScriptLineNumber, 0)&lt;br /&gt;
&lt;br /&gt;
	Local $tDCB = DllStructCreate($tagDCB)&lt;br /&gt;
	Local $tCommTimeouts = DllStructCreate($tagCOMMTIMEOUTS)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_BuildCommDCB($sMode, $tDCB)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;ReadTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;WriteTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	If Not _CommAPI_SetCommState($hFile, $tDCB) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	If Not _CommAPI_SetCommTimeouts($hFile, $tCommTimeouts) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveBinary&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveBinary(Const $hFile[, $iTimeout = 1[, $iMaxLength = 0[, $vSeparator = &amp;quot;&amp;quot;]]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLength          - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $vSeparator          - [in] A value which is used as a separator.&lt;br /&gt;
;                                              Is activated only by non-empty values.&lt;br /&gt;
; Return values .: Success - Received binary data&lt;br /&gt;
;                  Failure - Received binary data&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveString, _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveBinary(Const $hFile, Const $iTimeout = 1, Const $iMaxLength = 0, Const $vSeparator = &amp;quot;&amp;quot;)&lt;br /&gt;
	Local $bSeparator = Binary($vSeparator)&lt;br /&gt;
	Local $iSepLength = BinaryLen($bSeparator)&lt;br /&gt;
	Local $fSuccess = False&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;BYTE&amp;quot;)&lt;br /&gt;
	Local $pBuffer = DllStructGetPtr($tBuffer)&lt;br /&gt;
	Local $iRead = 0&lt;br /&gt;
	Local $vResult = Binary(&amp;quot;&amp;quot;)&lt;br /&gt;
	Local $iResLength = 0&lt;br /&gt;
	Local $hTimer = TimerInit()&lt;br /&gt;
	While True&lt;br /&gt;
		$fSuccess = _WinAPI_ReadFile($hFile, $pBuffer, 1, $iRead)&lt;br /&gt;
		If @error Then Return SetError(@error, @ScriptLineNumber, $vResult)&lt;br /&gt;
		If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, $vResult)&lt;br /&gt;
		If $iRead Then&lt;br /&gt;
			$vResult &amp;amp;= BinaryMid(Binary(DllStructGetData($tBuffer, 1)), 1, 1)&lt;br /&gt;
			$iResLength = BinaryLen($vResult)&lt;br /&gt;
			If $iResLength = $iMaxLength And $iMaxLength &amp;gt; 0 Then Return $vResult&lt;br /&gt;
			If $bSeparator = BinaryMid($vResult, 1 + $iResLength - $iSepLength) Then Return BinaryMid($vResult, 1, $iResLength - $iSepLength)&lt;br /&gt;
		Else&lt;br /&gt;
			If $vResult And Not $iSepLength Then Return $vResult&lt;br /&gt;
			If $iTimeout &amp;gt; 0 And $iTimeout &amp;lt; TimerDiff($hTimer) Then Return SetError(-2, @ScriptLineNumber, $vResult)&lt;br /&gt;
		EndIf&lt;br /&gt;
	WEnd&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ReceiveBinary&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveString&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveString(Const $hFile[, $iTimeout = 1[, $iMaxLength = 0[, $sSeparator = &amp;quot;&amp;quot;]]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLength          - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $sSeparator          - [in] A value which is used as a separator.&lt;br /&gt;
;                                              Is activated only by non-empty values.&lt;br /&gt;
;                  $iFlag               - [in] Flag for function BinaryToString().&lt;br /&gt;
; Return values .: Success - Received string&lt;br /&gt;
;                  Failure - Received string&lt;br /&gt;
;                            Received binary data in case of @error = -3&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
;                           -3 error in BinaryToString&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveBinary, _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveString(Const $hFile, Const $iTimeout = 1, Const $iMaxLength = 0, Const $sSeparator = &amp;quot;&amp;quot;, Const $iFlag = 1)&lt;br /&gt;
	Local $bResult = _CommAPI_ReceiveBinary($hFile, $iTimeout, $iMaxLength, StringToBinary($sSeparator, $iFlag))&lt;br /&gt;
	Local $iError = @error&lt;br /&gt;
	Local $iExtended = @extended&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	If $bResult Then&lt;br /&gt;
		$sResult = BinaryToString($bResult, $iFlag)&lt;br /&gt;
		If @error Then SetError(-3, @ScriptLineNumber, $bResult)&lt;br /&gt;
	EndIf&lt;br /&gt;
	Return SetError($iError, $iExtended, $sResult)&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ReceiveString&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitBinary&lt;br /&gt;
; Description ...: Transmits data (TxD/TX/TD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $vData               - [in] A binary value to transmit.&lt;br /&gt;
; Return values .: Success - Number of written bytes&lt;br /&gt;
;                  Failure - Number of written bytes&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_TransmitString, _CommAPI_ReceiveBinary&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitBinary(Const $hFile, Const $vData)&lt;br /&gt;
	Local $bData = Binary($vData)&lt;br /&gt;
	Local $iLength = BinaryLen($vData)&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;BYTE[&amp;quot; &amp;amp; $iLength &amp;amp; &amp;quot;]&amp;quot;)&lt;br /&gt;
	DllStructSetData($tBuffer, 1, $bData)&lt;br /&gt;
	Local $fSuccess = _WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), $iLength, $iWritten)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, $iWritten)&lt;br /&gt;
	Return $iWritten&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_TransmitBinary&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitString&lt;br /&gt;
; Description ...: Transmits data (TxD/TX/TD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sData               - [in] A string value to transmit.&lt;br /&gt;
;                  $iFlag               - [in] Flag for function StringToBinary().&lt;br /&gt;
; Return values .: Success - Number of written bytes&lt;br /&gt;
;                  Failure - Number of written bytes&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_TransmitBinary, _CommAPI_ReceiveString&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitString(Const $hFile, Const $sData, Const $iFlag = 1)&lt;br /&gt;
	Local $iWritten = _CommAPI_TransmitBinary($hFile, StringToBinary($sData, $iFlag))&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, $iWritten)&lt;br /&gt;
	Return $iWritten&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommUtilities.au3&amp;diff=12367</id>
		<title>CommUtilities.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommUtilities.au3&amp;diff=12367"/>
		<updated>2014-04-07T11:01:39Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:CommAPI]][[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommUtilities.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-03-07&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link(s) .......: http://www.autoitscript.com/wiki/CommUtilities.au3&lt;br /&gt;
;                  http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_CommStateToString&lt;br /&gt;
; Description ...: Create a string representation of a DCB structure.&lt;br /&gt;
; Syntax ........: _CommAPI_CommStateToString(Const $tDCB)&lt;br /&gt;
; Parameters ....: $tDCB                - [in] A DCB structure.&lt;br /&gt;
; Return values .: Success - A string representation of a DCB structure.&lt;br /&gt;
;                  Failure - Empty string&lt;br /&gt;
;                  @error  - 11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_CommStateToString(Const $tDCB)&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	Local $vValue = 0&lt;br /&gt;
	For $i = 1 To 15&lt;br /&gt;
		$vValue = DllStructGetData($tDCB, $i)&lt;br /&gt;
		If @error Then Return SetError(@error, @ScriptLineNumber, &amp;quot;&amp;quot;)&lt;br /&gt;
		Switch $i&lt;br /&gt;
			Case 1&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;DCBlength = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 2&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;Baudrate = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 3&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;fBitFields = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fBinary = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 0)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fParity = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 1)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fOutxCTSFlow = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 2)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fOutxDSRFlow = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 3)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fDTRControl = &amp;quot; &amp;amp; BitAND(0x3, BitShift($vValue, 4)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fDsrSensitivity = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 6)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fTXContinueOnXoff = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 7)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fOutX = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 8)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fInX = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 9)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fErrorChar = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 10)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fNull = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 11)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fRTSControl = &amp;quot; &amp;amp; BitAND(0x3, BitShift($vValue, 12)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fAbortOnError = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 14)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;Dymmy2 = &amp;quot; &amp;amp; BitAND(0x1FFFF, BitShift($vValue, 15)) &amp;amp; @CRLF&lt;br /&gt;
			Case 4&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;wReserved = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 5&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;XonLim = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 6&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;XoffLim = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 7&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;ByteSize = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 8&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;Parity = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 1&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;Stopbits = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 10&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;XonChar = &amp;quot; &amp;amp; Binary($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 11&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;XoffChar = &amp;quot; &amp;amp; Binary($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 12&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;ErrorChar = &amp;quot; &amp;amp; Binary($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 13&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;EofChar = &amp;quot; &amp;amp; Binary($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 14&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;EvtChar = &amp;quot; &amp;amp; Binary($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 15&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;wReserved = &amp;quot; &amp;amp; $vValue&lt;br /&gt;
		EndSwitch&lt;br /&gt;
	Next&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_CommStateToString&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_CommTimeoutsToString&lt;br /&gt;
; Description ...: Create s string representation of a COMMTIMEOUTS structure.&lt;br /&gt;
; Syntax ........: _CommAPI_CommTimeoutsToString(Const $tCommTimeouts)&lt;br /&gt;
; Parameters ....: $tCommTimeouts       - [in] A COMMTIMEOUTS structure.&lt;br /&gt;
; Return values .: Success - A string representation of a COMMTIMEOUTS structure.&lt;br /&gt;
;                  Failure - Empty string&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363190(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_CommTimeoutsToString(Const $tCommTimeouts)&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	Local $vValue = 0&lt;br /&gt;
	For $i = 1 To 5&lt;br /&gt;
		$vValue = DllStructGetData($tCommTimeouts, $i)&lt;br /&gt;
		If @error Then Return &amp;quot;&amp;quot;&lt;br /&gt;
		Switch $i&lt;br /&gt;
			Case 1&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;ReadIntervalTimeout = &amp;quot; &amp;amp; String($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 2&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;ReadTotalTimeoutMultiplier = &amp;quot; &amp;amp; String($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 3&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;ReadTotalTimeoutConstant = &amp;quot; &amp;amp; String($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 4&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;WriteTotalTimeoutMultiplier = &amp;quot; &amp;amp; String($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 5&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;WriteTotalTimeoutConstant = &amp;quot; &amp;amp; String($vValue)&lt;br /&gt;
		EndSwitch&lt;br /&gt;
	Next&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_CommTimeoutsToString&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_CreateModeString&lt;br /&gt;
; Description ...: Create definition string&lt;br /&gt;
; Syntax ........: _CommAPI_CreateModeString(Const $iPort[, $iBaudRate = Default[, $iParity = Default[, $iByteSize = Default[,&lt;br /&gt;
;                  $iStopBits = Default[, $iTimeouts = Default[, $iXON = Default[, $iDSR = Default[, $iCTS = Default[,&lt;br /&gt;
;                  $iDTR = Default[, $iRTS = Default[, $iIDSR = Default]]]]]]]]]]])&lt;br /&gt;
; Parameters ....: $iPort               - [in] A port number.&lt;br /&gt;
;                  $iBaudRate           - [in] The baud rate at which the communications device operates.&lt;br /&gt;
;                  $iParity             - [in] The parity scheme to be used.&lt;br /&gt;
;                  $iByteSize           - [in] Specifies the number of data bits in a character.&lt;br /&gt;
;                  $iStopBits           - [in] Specifies the number of stop bits that define the end of a character: 1, 1.5, or 2.&lt;br /&gt;
;                  $iXON                - [in] Specifies whether the xon or xoff protocol for data-flow control is on or off.&lt;br /&gt;
;                  $iDSR                - [in] Specifies whether output handshaking that uses the Data Set Ready (DSR) circuit is on or off.&lt;br /&gt;
;                  $iCTS                - [in] Specifies whether output handshaking that uses the Clear To Send (CTS) circuit is on or off.&lt;br /&gt;
;                  $iDTR                - [in] Specifies whether the Data Terminal Ready (DTR) circuit is on or off or set to handshake.&lt;br /&gt;
;                  $iRTS                - [in] Specifies whether the Request To Send (RTS) circuit is set to on, off, handshake, or toggle.&lt;br /&gt;
;                  $iIDSR               - [in] Specifies whether the DSR circuit sensitivity is on or off.&lt;br /&gt;
; Return values .: Device-control String&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort&lt;br /&gt;
; Link ..........: http://technet.microsoft.com/en-us/library/cc732236.aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_CreateModeString(Const $iPort, Const $iBaudRate = Default, Const $iParity = Default, Const $iByteSize = Default, Const $iStopBits = Default, Const $iXON = Default, $iDSR = Default, $iCTS = Default, $iDTR = Default, $iRTS = Default, $iIDSR = Default)&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	Switch Number($iPort)&lt;br /&gt;
		Case 1 To 256&lt;br /&gt;
			$sResult = &amp;quot;COM&amp;quot; &amp;amp; $iPort &amp;amp; &amp;quot;:&amp;quot;&lt;br /&gt;
		Case Else&lt;br /&gt;
			$sResult = &amp;quot;COM1:&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch Number($iBaudRate)&lt;br /&gt;
		Case 11 To 256000&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; BAUD=&amp;quot; &amp;amp; $iBaudRate&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iParity)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;N&amp;quot;, &amp;quot;NONE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; PARITY=N&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;O&amp;quot;, &amp;quot;ODD&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; PARITY=O&amp;quot;&lt;br /&gt;
		Case &amp;quot;2&amp;quot;, &amp;quot;E&amp;quot;, &amp;quot;EVEN&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; PARITY=E&amp;quot;&lt;br /&gt;
		Case &amp;quot;3&amp;quot;, &amp;quot;M&amp;quot;, &amp;quot;MARK&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; PARITY=M&amp;quot;&lt;br /&gt;
		Case &amp;quot;4&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;SPACE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; PARITY=S&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch Number($iByteSize)&lt;br /&gt;
		Case 5 To 8&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; DATA=&amp;quot; &amp;amp; $iByteSize&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	If IsNumber($iStopBits) Then&lt;br /&gt;
		Switch $iStopBits&lt;br /&gt;
			Case 0&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=1&amp;quot;&lt;br /&gt;
			Case 1&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=1.5&amp;quot;&lt;br /&gt;
			Case 2&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=2&amp;quot;&lt;br /&gt;
		EndSwitch&lt;br /&gt;
	Else&lt;br /&gt;
		Switch StringUpper($iStopBits)&lt;br /&gt;
			Case &amp;quot;1&amp;quot;, &amp;quot;O&amp;quot;, &amp;quot;ONE&amp;quot;&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=1&amp;quot;&lt;br /&gt;
			Case &amp;quot;1.5&amp;quot;, &amp;quot;F&amp;quot;, &amp;quot;FIVE&amp;quot;&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=1.5&amp;quot;&lt;br /&gt;
			Case &amp;quot;2&amp;quot;, &amp;quot;T&amp;quot;, &amp;quot;TWO&amp;quot;&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=2&amp;quot;&lt;br /&gt;
		EndSwitch&lt;br /&gt;
	EndIf&lt;br /&gt;
	Switch StringUpper($iXON)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; XON=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; XON=ON&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iDSR)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; ODSR=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; ODSR=ON&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iCTS)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; OCTS=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; OCTS=ON&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iDTR)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; DTR=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; DTR=ON&amp;quot;&lt;br /&gt;
		Case &amp;quot;2&amp;quot;, &amp;quot;HS&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; DTR=HS&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iRTS)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; RTS=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; RTS=ON&amp;quot;&lt;br /&gt;
		Case &amp;quot;2&amp;quot;, &amp;quot;HS&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; RTS=HS&amp;quot;&lt;br /&gt;
		Case &amp;quot;3&amp;quot;, &amp;quot;TG&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; RTS=TG&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iIDSR)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; IDSR=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; IDSR=ON&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_CreateModeString&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCOMPorts&lt;br /&gt;
; Description ...:&lt;br /&gt;
; Syntax ........: _CommAPI_GetCOMPorts()&lt;br /&gt;
; Parameters ....:&lt;br /&gt;
; Return values .: Success - A string with all COM Ports.&lt;br /&gt;
;                  Failure - Empty string&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCOMPorts()&lt;br /&gt;
	Local $sResult&lt;br /&gt;
	Local $oWMIService = ObjGet(&amp;quot;winmgmts:\\localhost\root\CIMV2&amp;quot;)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, &amp;quot;&amp;quot;)&lt;br /&gt;
	Local $oItems = $oWMIService.ExecQuery(&amp;quot;SELECT * FROM Win32_PnPEntity WHERE Name LIKE &#039;%(COM%)&#039;&amp;quot;, &amp;quot;WQL&amp;quot;, 48)&lt;br /&gt;
	For $oItem In $oItems&lt;br /&gt;
		$sResult &amp;amp;= $oItem.Name &amp;amp; @CRLF&lt;br /&gt;
	Next&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCOMPorts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPIHelper.au3&amp;diff=12366</id>
		<title>CommAPIHelper.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPIHelper.au3&amp;diff=12366"/>
		<updated>2014-04-07T11:01:32Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:CommAPI]][[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommAPIHelper.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-03-07&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPI.au3&amp;quot;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ChangeCommStateElement&lt;br /&gt;
; Description ...: Change one control setting for an element of a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ChangeCommStateElement(Const $hFile, Const $sElement, Const $vValue)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sElement            - [in] A element name of DCB structure.&lt;br /&gt;
;                  $vValue              - [in] A new value for the element.&lt;br /&gt;
; Return values .: Success - Previous data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommStateElement, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ChangeCommStateElement(Const $hFile, Const $sElement, Const $vValue)&lt;br /&gt;
	Local $tDCB = DllStructCreate($tagDCB)&lt;br /&gt;
	_CommAPI_GetCommState($hFile, $tDCB)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Local $vResult = _CommAPI_SetCommStateElement($tDCB, $sElement, $vValue)&lt;br /&gt;
	_CommAPI_SetCommState($hFile, $tDCB)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ChangeCommStateElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ChangeCommTimeoutsElement&lt;br /&gt;
; Description ...: Change one time-out parameter for an element off a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ChangeCommTimeoutsElement(Const $hFile, Const $sElement, Const $vValue)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sElement            - [in] A element name of COMMTIMEOUTS structure.&lt;br /&gt;
;                  $vValue              - [in] A new value for the element.&lt;br /&gt;
; Return values .: Success - Previous data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommTimeoutsElement, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363190(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ChangeCommTimeoutsElement(Const $hFile, Const $sElement, Const $vValue)&lt;br /&gt;
	Local $tCommTimeouts = DllStructCreate($tagCOMMTIMEOUTS)&lt;br /&gt;
	_CommAPI_GetCommTimeouts($hFile, $tCommTimeouts)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Local $vResult = _CommAPI_SetCommTimeoutsElement($tCommTimeouts, $sElement, $vValue)&lt;br /&gt;
	_CommAPI_SetCommTimeouts($hFile, $tCommTimeouts)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ChangeCommTimeoutsElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommStateElement&lt;br /&gt;
; Description ...: Retrieves one control setting for an element of a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommStateElement(Const $tDCB, Const $sElement)&lt;br /&gt;
; Parameters ....: $tDCB                - [in] A DCB structure.&lt;br /&gt;
;                  $sElement            - [in] A element name of DCB structure.&lt;br /&gt;
; Return values .: Success - Data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommState, _CommAPI_SetCommStateElement, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommStateElement(Const $tDCB, Const $sElement)&lt;br /&gt;
	Local $vResult = 0&lt;br /&gt;
	Local $iShift = 0&lt;br /&gt;
	Local $bValid = 0x1&lt;br /&gt;
	Switch $sElement&lt;br /&gt;
		Case &amp;quot;fBinary&amp;quot;&lt;br /&gt;
		Case &amp;quot;fParity&amp;quot;&lt;br /&gt;
			$iShift = 1&lt;br /&gt;
		Case &amp;quot;fOutxCTSFlow&amp;quot;&lt;br /&gt;
			$iShift = 2&lt;br /&gt;
		Case &amp;quot;fOutxDSRFlow&amp;quot;&lt;br /&gt;
			$iShift = 3&lt;br /&gt;
		Case &amp;quot;fDTRControl&amp;quot;&lt;br /&gt;
			$iShift = 4&lt;br /&gt;
			$bValid = 0x3&lt;br /&gt;
		Case &amp;quot;fDsrSensitivity&amp;quot;&lt;br /&gt;
			$iShift = 6&lt;br /&gt;
		Case &amp;quot;fTXContinueOnXoff&amp;quot;&lt;br /&gt;
			$iShift = 7&lt;br /&gt;
		Case &amp;quot;fOutX&amp;quot;&lt;br /&gt;
			$iShift = 8&lt;br /&gt;
		Case &amp;quot;fInX&amp;quot;&lt;br /&gt;
			$iShift = 9&lt;br /&gt;
		Case &amp;quot;fErrorChar&amp;quot;&lt;br /&gt;
			$iShift = 10&lt;br /&gt;
		Case &amp;quot;fNull&amp;quot;&lt;br /&gt;
			$iShift = 11&lt;br /&gt;
		Case &amp;quot;fRTSControl&amp;quot;&lt;br /&gt;
			$iShift = 12&lt;br /&gt;
			$bValid = 0x3&lt;br /&gt;
		Case &amp;quot;fAbortOnError&amp;quot;&lt;br /&gt;
			$iShift = 14&lt;br /&gt;
		Case &amp;quot;Dymmy2&amp;quot;&lt;br /&gt;
			$iShift = 15&lt;br /&gt;
			$bValid = 0x1FFFF&lt;br /&gt;
		Case Else&lt;br /&gt;
			$vResult = DllStructGetData($tDCB, $sElement)&lt;br /&gt;
			If @error Then Return SetError(@error+10, @ScriptLineNumber, 0)&lt;br /&gt;
			Return $vResult&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	$vResult = DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;)&lt;br /&gt;
	If @error Then Return SetError(@error+10, @ScriptLineNumber, 0)&lt;br /&gt;
	Return BitAND($bValid, BitShift($vResult, $iShift))&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommStateElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommTimeoutsElement&lt;br /&gt;
; Description ...: Retrieves one time-out parameter for an element of a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommTimeoutsElement(Const $tCommTimeouts, Const $sElement)&lt;br /&gt;
; Parameters ....: $tCommTimeouts       - [in] A COMMTIMEOUTS structure.&lt;br /&gt;
;                  $sElement            - [in] A element name of DCB structure.&lt;br /&gt;
; Return values .: Success - Data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommTimeouts, _CommAPI_SetCommTimeoutsElement, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363190(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommTimeoutsElement(Const $tCommTimeouts, Const $sElement)&lt;br /&gt;
	Local $vResult = 0&lt;br /&gt;
	$vResult = DllStructGetData($tCommTimeouts, $sElement)&lt;br /&gt;
	If @error Then Return SetError(@error+10, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommTimeoutsElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_IsOnCTS&lt;br /&gt;
; Description ...: The CTS (clear-to-send) signal is on.&lt;br /&gt;
; Syntax ........: _CommAPI_IsOnCTS(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_IsOnCTS(Const $hFile)&lt;br /&gt;
	Local $iModemStatus = _CommAPI_GetCommModemStatus($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	If BitAND($iModemStatus, $MS_CTS_ON) Then Return True&lt;br /&gt;
	Return False&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_IsOnCTS&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_IsOnDSR&lt;br /&gt;
; Description ...: The DSR (data-set-ready) signal is on.&lt;br /&gt;
; Syntax ........: _CommAPI_IsOnDSR(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_IsOnDSR(Const $hFile)&lt;br /&gt;
	Local $iModemStatus = _CommAPI_GetCommModemStatus($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	If BitAND($iModemStatus, $MS_DSR_ON) Then Return True&lt;br /&gt;
	Return False&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_IsOnDSR&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_IsOnRI&lt;br /&gt;
; Description ...: The RI (ring indicator) signal is on.&lt;br /&gt;
; Syntax ........: _CommAPI_IsOnRI(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_IsOnRI(Const $hFile)&lt;br /&gt;
	Local $iModemStatus = _CommAPI_GetCommModemStatus($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	If BitAND($iModemStatus, $MS_RING_ON) Then Return True&lt;br /&gt;
	Return False&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_IsOnRI&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_IsOnDCD&lt;br /&gt;
; Description ...: The DCD/CD/RLSD (Data Carrier Detect/Carrier Detect/receive-line-signal-detect) signal is on.&lt;br /&gt;
; Syntax ........: _CommAPI_IsOnDCD(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_IsOnDCD(Const $hFile)&lt;br /&gt;
	Local $iModemStatus = _CommAPI_GetCommModemStatus($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	If BitAND($iModemStatus, $MS_RLSD_ON) Then Return True&lt;br /&gt;
	Return False&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_IsOnDCD&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommStateElement&lt;br /&gt;
; Description ...: Set one control setting for an element of a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommStateElement(ByRef $tDCB, Const $sElement, Const $vValue)&lt;br /&gt;
; Parameters ....: $tDCB                - [in/out] A DCB structure.&lt;br /&gt;
;                  $sElement            - [in] A element name of DCB structure.&lt;br /&gt;
;                  $vValue              - [in] A new value for the element.&lt;br /&gt;
; Return values .: Success - Previous data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommState, _CommAPI_GetCommStateElement, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommStateElement(ByRef $tDCB, Const $sElement, Const $vValue)&lt;br /&gt;
	Local $vResult = 0&lt;br /&gt;
	Local $iShift = 0&lt;br /&gt;
	Local $bValid = 0x1&lt;br /&gt;
	Local $bMask = 0xFFFFFFFF&lt;br /&gt;
	Switch $sElement&lt;br /&gt;
		Case &amp;quot;fBinary&amp;quot;&lt;br /&gt;
			$bMask = 0xFFFFFFFE&lt;br /&gt;
		Case &amp;quot;fParity&amp;quot;&lt;br /&gt;
			$iShift = -1&lt;br /&gt;
			$bMask = 0xFFFFFFFD&lt;br /&gt;
		Case &amp;quot;fOutxCTSFlow&amp;quot;&lt;br /&gt;
			$iShift = -2&lt;br /&gt;
			$bMask = 0xFFFFFFFB&lt;br /&gt;
		Case &amp;quot;fOutxDSRFlow&amp;quot;&lt;br /&gt;
			$iShift = -3&lt;br /&gt;
			$bMask = 0xFFFFFFF7&lt;br /&gt;
		Case &amp;quot;fDTRControl&amp;quot;&lt;br /&gt;
			$iShift = -4&lt;br /&gt;
			$bValid = 0x3&lt;br /&gt;
			$bMask = 0xFFFFFFCF&lt;br /&gt;
		Case &amp;quot;fDsrSensitivity&amp;quot;&lt;br /&gt;
			$iShift = -6&lt;br /&gt;
			$bMask = 0xFFFFFFBF&lt;br /&gt;
		Case &amp;quot;fTXContinueOnXoff&amp;quot;&lt;br /&gt;
			$iShift = -7&lt;br /&gt;
			$bMask = 0xFFFFFF7F&lt;br /&gt;
		Case &amp;quot;fOutX&amp;quot;&lt;br /&gt;
			$iShift = -8&lt;br /&gt;
			$bMask = 0xFFFFFEFF&lt;br /&gt;
		Case &amp;quot;fInX&amp;quot;&lt;br /&gt;
			$iShift = -9&lt;br /&gt;
			$bMask = 0xFFFFFDFF&lt;br /&gt;
		Case &amp;quot;fErrorChar&amp;quot;&lt;br /&gt;
			$iShift = -10&lt;br /&gt;
			$bMask = 0xFFFFFBFF&lt;br /&gt;
		Case &amp;quot;fNull&amp;quot;&lt;br /&gt;
			$iShift = -11&lt;br /&gt;
			$bMask = 0xFFFFF7FF&lt;br /&gt;
		Case &amp;quot;fRTSControl&amp;quot;&lt;br /&gt;
			$iShift = -12&lt;br /&gt;
			$bValid = 0x3&lt;br /&gt;
			$bMask = 0xFFFFCFFF&lt;br /&gt;
		Case &amp;quot;fAbortOnError&amp;quot;&lt;br /&gt;
			$iShift = -14&lt;br /&gt;
			$bMask = 0xFFFFBFFF&lt;br /&gt;
		Case &amp;quot;Dymmy2&amp;quot;&lt;br /&gt;
			$iShift = -15&lt;br /&gt;
			$bValid = 0x1FFFF&lt;br /&gt;
			$bMask = 0x7FFF&lt;br /&gt;
		Case Else&lt;br /&gt;
			$vResult = DllStructSetData($tDCB, $sElement, $vValue)&lt;br /&gt;
			If @error Then Return SetError(@error+10, @ScriptLineNumber, 0)&lt;br /&gt;
			Return $vResult&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	$vResult = DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;)&lt;br /&gt;
	If @error Then Return SetError(@error+10, @ScriptLineNumber, 0)&lt;br /&gt;
	$vResult = BitXOR(BitShift(BitAND($vValue, $bValid), $iShift), BitAND($vResult, $bMask))&lt;br /&gt;
	$vResult = DllStructSetData($tDCB, &amp;quot;fBitFields&amp;quot;, $vResult)&lt;br /&gt;
	If @error Then Return SetError(@error+10, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommStateElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommTimeoutsElement&lt;br /&gt;
; Description ...: Sets one time-out parameter for an element off a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommTimeoutsElement(Byref $tCommTimeouts, Const $sElement, Const $vValue)&lt;br /&gt;
; Parameters ....: $tCommTimeouts       - [in/out] A COMMTIMEOUTS structure.&lt;br /&gt;
;                  $sElement            - [in] A element name of COMMTIMEOUTS structure.&lt;br /&gt;
;                  $vValue              - [in] A new value for the element.&lt;br /&gt;
; Return values .: Success - Previous data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ChangeCommTimeoutsElement, _CommAPI_SetCommTimeouts, _CommAPI_GetCommTimeoutsElement, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363190(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommTimeoutsElement(ByRef $tCommTimeouts, Const $sElement, Const $vValue)&lt;br /&gt;
	Local $vResult = DllStructSetData($tCommTimeouts, $sElement, $vValue)&lt;br /&gt;
	If @error Then Return SetError(@error+10, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommTimeoutsElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetOnDTR&lt;br /&gt;
; Description ...: Sends or clears the DTR (data-terminal-ready) signal.&lt;br /&gt;
; Syntax ........: _CommAPI_SetOnDTR(Const $hFile, Const $iDTR)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iDTR                - [in] A boolean value: True  - Sends the DTR (data-terminal-ready) signal.&lt;br /&gt;
;                                                               False - Clears the DTR (data-terminal-ready) signal.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_EscapeCommFunction&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363254(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetOnDTR(Const $hFile, Const $iDTR)&lt;br /&gt;
	Local $iFunction = 0&lt;br /&gt;
	Switch StringUpper($iDTR)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;, String($CLRDTR)&lt;br /&gt;
			$iFunction = $CLRDTR&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;, String($SETDTR)&lt;br /&gt;
			$iFunction = $SETDTR&lt;br /&gt;
		Case Else&lt;br /&gt;
			Return False&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	_CommAPI_EscapeCommFunction($hFile, $iFunction)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetOnDTR&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetOnRTS&lt;br /&gt;
; Description ...: Sends or clears the RTS (request-to-send) signal.&lt;br /&gt;
; Syntax ........: _CommAPI_SetOnRTS(Const $hFile, Const $iRTS)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iRTS                - [in] A boolean value: True  - Sends the RTS (request-to-send) signal.&lt;br /&gt;
;                                                               False - Clears the RTS (request-to-send) signal.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_EscapeCommFunction&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363254(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetOnRTS(Const $hFile, Const $iRTS)&lt;br /&gt;
	Local $iFunction = 0&lt;br /&gt;
	Switch StringUpper($iRTS)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;, String($CLRRTS)&lt;br /&gt;
			$iFunction = $CLRRTS&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;, String($SETRTS)&lt;br /&gt;
			$iFunction = $SETRTS&lt;br /&gt;
		Case Else&lt;br /&gt;
			Return False&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	_CommAPI_EscapeCommFunction($hFile, $iFunction)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetOnRTS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI.au3&amp;diff=12365</id>
		<title>CommAPI.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI.au3&amp;diff=12365"/>
		<updated>2014-04-07T11:01:24Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:CommAPI]][[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommAPI.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-04-04&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPIConstants.au3&amp;quot;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_BuildCommDCB&lt;br /&gt;
; Description ...: Fills a specified DCB structure with values specified in a device-control string.&lt;br /&gt;
; Syntax ........: _CommAPI_BuildCommDCB(Const $sMode, Byref $tDBC)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
;                  $tDBC                - [out] A DCB structure.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_BuildCommDCBAndTimeouts, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363143(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_BuildCommDCB(Const $sMode, ByRef $tDBC)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;BuildCommDCB&amp;quot;, &amp;quot;str&amp;quot;, $sMode, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDBC))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_BuildCommDCB&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_BuildCommDCBAndTimeouts&lt;br /&gt;
; Description ...: Translates a device-definition string into appropriate device-control block codes and places them into a device control block.&lt;br /&gt;
;                  The function can also set up time-out values for a device.&lt;br /&gt;
; Syntax ........: _CommAPI_BuildCommDCBAndTimeouts(Const $sMode, Byref $tDBC, Byref $tCommTimeouts)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
;                  $tDBC                - [out] A DCB structure.&lt;br /&gt;
;                  $tCommTimeouts       - [out] A COMMTIMEOUTS structure.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_BuildCommDCB, $tagDCB, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363145(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_BuildCommDCBAndTimeouts(Const $sMode, ByRef $tDBC, ByRef $tCommTimeouts)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;BuildCommDCBAndTimeouts&amp;quot;, &amp;quot;str&amp;quot;, $sMode, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDBC), &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_BuildCommDCBAndTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClearCommBreak&lt;br /&gt;
; Description ...: Restores character transmission for a specified communications device and places the transmission line in a nonbreak state.&lt;br /&gt;
; Syntax ........: _CommAPI_ClearCommBreak(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ClearCommError&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363179(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClearCommBreak(Const $hFile)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;ClearCommBreak&amp;quot;, &amp;quot;handle&amp;quot;, $hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClearCommBreak&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClearCommError&lt;br /&gt;
; Description ...: Retrieves information about a communications error and reports the current status of a communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ClearCommError(Const $hFile[, $tComStat = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tComStat            - [out] A COMSTAT structure in which the device&#039;s status information is returned.&lt;br /&gt;
; Return values .: Success - A mask indicating the type of error.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ClearCommBreak, $tagCOMSTAT&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363180(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClearCommError(Const $hFile, $tComStat = 0)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;ClearCommError&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tComStat))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If Not $aResult[0] Then SetError(-1, @ScriptLineNumber)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClearCommError&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_EscapeCommFunction&lt;br /&gt;
; Description ...: Directs the specified communications device to perform an extended function.&lt;br /&gt;
; Syntax ........: _CommAPI_EscapeCommFunction(Const $hFile, Const $iFunction)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iFunction           - [in] The extended function to be performed.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetOnDTR, _CommAPI_SetOnRTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363254(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_EscapeCommFunction(Const $hFile, Const $iFunction)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;EscapeCommFunction&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iFunction)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_EscapeCommFunction&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommMask&lt;br /&gt;
; Description ...: Retrieves the value of the event mask for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommMask(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - A mask of events that are currently enabled.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363257(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommMask(Const $hFile)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommMask&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If Not $aResult[0] Then SetError(-1, @ScriptLineNumber)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommMask&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Description ...: Retrieves the modem control-register values.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommModemStatus(Const $hFile, Byref $pModemStatus)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - The current state of the modem control-register values.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_IsOnCTS, _CommAPI_IsOnDSR, _CommAPI_IsOnRI, _CommAPI_IsOnDCD, _CommAPI_WaitCommEvent&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommModemStatus(Const $hFile)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommModemStatus&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If Not $aResult[0] Then SetError(-1, @ScriptLineNumber)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommModemStatus&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommProperties&lt;br /&gt;
; Description ...: Retrieves information about the communications properties for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommProperties(Const $hFile[, $tCOMMPROP = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCOMMPROP           - [out] A COMMPROP structure in which the communications properties information is returned.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363259(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommProperties(Const $hFile, $tCOMMPROP = 0)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommProperties&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCOMMPROP))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommProperties&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommState&lt;br /&gt;
; Description ...: Retrieves the current control settings for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommState(Const $hFile, $tDCB = 0)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tDCB                - [out] A DCB structure that receives the control settings information.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommState, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363260(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommState(Const $hFile, $tDCB = 0)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommState&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDCB))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommState&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommTimeouts&lt;br /&gt;
; Description ...: Retrieves the time-out parameters for all read and write operations on a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommTimeouts(Const $hFile, $tCommTimeouts = 0)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCommTimeouts       - [out] A COMMTIMEOUTS structure in which the time-out information is returned.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommTimeouts, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363261(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommTimeouts(Const $hFile, $tCommTimeouts = 0)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommTimeouts&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_PurgeComm&lt;br /&gt;
; Description ...: Discards all characters from the output or input buffer of a specified communications resource.&lt;br /&gt;
;                  It can also terminate pending read or write operations on the resource.&lt;br /&gt;
; Syntax ........: _CommAPI_PurgeComm(Const $hFile[, $iFlags = $PURGE_ALL])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iFlags              - [in] An integer value.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363428(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_PurgeComm(Const $hFile, Const $iFlags = $PURGE_ALL)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;PurgeComm&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iFlags)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_PurgeComm&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommBreak&lt;br /&gt;
; Description ...: Suspends character transmission for a specified communications device and places the transmission line in a break state until the ClearCommBreak function is called.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommBreak(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363433(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommBreak(Const $hFile)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommBreak&amp;quot;, &amp;quot;handle&amp;quot;, $hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommBreak&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommMask&lt;br /&gt;
; Description ...: Specifies a set of events to be monitored for a communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommMask(Const $hFile, Const $iEventMask)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iEventMask          - [in] The events to be enabled. A value of zero disables all events.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363435(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommMask(Const $hFile, Const $iEventMask)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommMask&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iEventMask)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommMask&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommState&lt;br /&gt;
; Description ...: Configures a communications device according to the specifications in a device-control block.&lt;br /&gt;
;                  The function reinitializes all hardware and control settings, but it does not empty output or input queues.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommState(Const $hFile, Const $tDCB)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tDCB                - [in] A DCB structure that contains the configuration information for the specified communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommState, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363436(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommState(Const $hFile, Const $tDCB)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommState&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDCB))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommState&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommTimeouts&lt;br /&gt;
; Description ...: Sets the time-out parameters for all read and write operations on a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommTimeouts(Const $hFile, Const $tCommTimeouts)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCommTimeouts       - [in] A COMMTIMEOUTS structure that contains the new time-out values.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommTimeouts, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363437(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommTimeouts(Const $hFile, Const $tCommTimeouts)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommTimeouts&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetupComm&lt;br /&gt;
; Description ...: Initializes the communications parameters for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetupComm(Const $hFile, Const $iInQueue, Const $iOutQueue)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iInQueue            - [in] The recommended size of the device&#039;s internal input buffer, in bytes.&lt;br /&gt;
;                  $iOutQueue           - [in] The recommended size of the device&#039;s internal output buffer, in bytes.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363439(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetupComm(Const $hFile, Const $iInQueue, Const $iOutQueue)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetupComm&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iInQueue, &amp;quot;dword&amp;quot;, $iOutQueue)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetupComm&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitCommChar&lt;br /&gt;
; Description ...: Transmits a specified character ahead of any pending data in the output buffer of the specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitCommChar(Const $hFile, Const $cChar)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sChar               - [in] The character to be transmitted.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363473(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitCommChar(Const $hFile, Const $cChar)&lt;br /&gt;
	Local $tChar = DllStructCreate(&amp;quot;char&amp;quot;)&lt;br /&gt;
	DllStructSetData($tChar, 1, $cChar)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;TransmitCommChar&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;char&amp;quot;, $tChar)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_TransmitCommChar&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_WaitCommEvent&lt;br /&gt;
; Description ...: Waits for an event to occur for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_WaitCommEvent(Const $hFile [, Const $tOverlapped = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tOverlapped         - [in] An OVERLAPPED structure.&lt;br /&gt;
; Return values .: Success - A mask indicating the type of event that occurred.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_EscapeCommFunction, _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363479(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_WaitCommEvent(Const $hFile, Const $tOverlapped = 0)&lt;br /&gt;
	Local $pOverlapped = DllStructGetPtr($tOverlapped)&lt;br /&gt;
	If Not $pOverlapped Then $pOverlapped = DllStructGetPtr(DllStructCreate($tagOverlapped))&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;WaitCommEvent&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0, &amp;quot;ptr&amp;quot;, $pOverlapped)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If Not $aResult[2] Then Return SetError(-1, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_WaitCommEvent&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPIConstants.au3&amp;diff=12364</id>
		<title>CommAPIConstants.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPIConstants.au3&amp;diff=12364"/>
		<updated>2014-04-07T11:01:16Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:CommAPI]][[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommAPIConstants.au3&lt;br /&gt;
; Title .........: Communications structures and constants of Windows API&lt;br /&gt;
; Description ...: Communications structures of Windows API have been translated to AutoIt structures.&lt;br /&gt;
; Version Date ..: 2014-03-31&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363199(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;StructureConstants.au3&amp;quot;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global Const $tagCOMMPROP = _&lt;br /&gt;
		&amp;quot;WORD  wPacketLength;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  wPacketVersion;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwServiceMask;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwReserved1;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxTxQueue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxRxQueue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxBaud;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwProvSubType;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwProvCapabilities;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSettableParams;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSettableBaud;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  wSettableData;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  wSettableStopParity;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwCurrentTxQueue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwCurrentRxQueue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwProvSpec1;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwProvSpec2;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WCHAR wcProvChar[1];&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Global Const $tagCOMMTIMEOUTS = _&lt;br /&gt;
		&amp;quot;DWORD ReadIntervalTimeout;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD ReadTotalTimeoutMultiplier;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD ReadTotalTimeoutConstant;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD WriteTotalTimeoutMultiplier;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD WriteTotalTimeoutConstant;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cs&lt;br /&gt;
	http://msdn.microsoft.com/en-us/library/aa363200(v=vs.85).aspx&lt;br /&gt;
	The eight actual COMSTAT bit-sized data fields within the four bytes of fBitFields can be manipulated by bitwise logical And/Or operations.&lt;br /&gt;
	FieldName           Bits    Description&lt;br /&gt;
	-----------------   -----   ---------------------------&lt;br /&gt;
	fCtsHold             1      Tx waiting for CTS signal&lt;br /&gt;
	fDsrHold             2      Tx waiting for DSR signal&lt;br /&gt;
	fRlsdHold            3      Tx waiting for RLSD signal&lt;br /&gt;
	fXoffHold            4      Tx waiting, XOFF char rec&#039;d&lt;br /&gt;
	fXoffSent            5      Tx waiting, XOFF char sent&lt;br /&gt;
	fEof                 6      EOF character sent&lt;br /&gt;
	fTxim                7      character waiting for Tx&lt;br /&gt;
	fReserved            8-32   reserved (25 bits)&lt;br /&gt;
#ce&lt;br /&gt;
&lt;br /&gt;
Global Const $tagCOMSTAT = _&lt;br /&gt;
		&amp;quot;DWORD fBitFields;&amp;quot; &amp;amp; _ ; see comment above&lt;br /&gt;
		&amp;quot;DWORD cbInQue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD cbOutQue;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cs&lt;br /&gt;
	http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
	The fourteen actual DCB bit-sized data fields within the four bytes of fBitFields can be manipulated by bitwise logical And/Or operations.&lt;br /&gt;
	FieldName           Bits    Description&lt;br /&gt;
	-----------------   -----   ---------------------------&lt;br /&gt;
	fBinary              1      binary mode, no EOF check&lt;br /&gt;
	fParity              2      enable parity checking&lt;br /&gt;
	fOutxCtsFlow         3      CTS output flow control&lt;br /&gt;
	fOutxDsrFlow         4      DSR output flow control&lt;br /&gt;
	fDtrControl          5-6    DTR flow control type&lt;br /&gt;
	fDsrSensitivity      7      DSR sensitivity&lt;br /&gt;
	fTXContinueOnXoff    8      XOFF continues Tx&lt;br /&gt;
	fOutX                9      XON/XOFF out flow control&lt;br /&gt;
	fInX                10      XON/XOFF in flow control&lt;br /&gt;
	fErrorCHAR          11      enable error replacement&lt;br /&gt;
	fNull               12      enable null stripping&lt;br /&gt;
	fRtsControl         13-14   RTS flow control&lt;br /&gt;
	fAbortOnError       15      abort reads/writes on error&lt;br /&gt;
	fDummy2             16-32   reserved (17 bits)&lt;br /&gt;
#ce&lt;br /&gt;
&lt;br /&gt;
Global Const $tagDCB = _&lt;br /&gt;
		&amp;quot;DWORD DCBlength;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD BaudRate;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD fBitFields;&amp;quot; &amp;amp; _ ; see comment above&lt;br /&gt;
		&amp;quot;WORD  wReserved;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  XonLim;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  XoffLim;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  ByteSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  Parity;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  StopBits;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  XonChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  XoffChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  ErrorChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  EofChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  EvtChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  wReserved1;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Global Const $tagMODEMDEVCAPS = _&lt;br /&gt;
		&amp;quot;DWORD dwActualSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwRequiredSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDevSpecificOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDevSpecificSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemProviderVersion;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemManufacturerOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemManufacturerSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemModelOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemModelSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemVersionOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemVersionSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDialOptions;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwCallSetupFailTimer;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwInactivityTimeout;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSpeakerVolume;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSpeakerMode;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemOptions;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxDTERate;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxDCERate;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  abVariablePortion[1];&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Global Const $tagMODEMSETTINGS = _&lt;br /&gt;
		&amp;quot;DWORD dwActualSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwRequiredSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDevSpecificOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDevSpecificSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwCallSetupFailTimer;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwInactivityTimeout;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSpeakerVolume;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSpeakerMode;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwPreferredModemOptions;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwNegotiatedModemOptions;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwNegotiatedDCERate;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  abVariablePortion[1];&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global Const $SETXOFF = 1&lt;br /&gt;
Global Const $SETXON = 2&lt;br /&gt;
Global Const $SETRTS = 3&lt;br /&gt;
Global Const $CLRRTS = 4&lt;br /&gt;
Global Const $SETDTR = 5&lt;br /&gt;
Global Const $CLRDTR = 6&lt;br /&gt;
Global Const $SETBREAK = 8&lt;br /&gt;
Global Const $CLRBREAK = 9&lt;br /&gt;
&lt;br /&gt;
Global Const $CE_RXOVER = 0x0001&lt;br /&gt;
Global Const $CE_OVERRUN = 0x0002&lt;br /&gt;
Global Const $CE_RXPARITY = 0x0004&lt;br /&gt;
Global Const $CE_FRAME = 0x0008&lt;br /&gt;
Global Const $CE_BREAK = 0x0010&lt;br /&gt;
&lt;br /&gt;
Global Const $EV_RXCHAR = 0x0001&lt;br /&gt;
Global Const $EV_RXFLAG = 0x0002&lt;br /&gt;
Global Const $EV_TXEMPTY = 0x0004&lt;br /&gt;
Global Const $EV_CTS = 0x0008&lt;br /&gt;
Global Const $EV_DSR = 0x0010&lt;br /&gt;
Global Const $EV_RLSD = 0x0020&lt;br /&gt;
Global Const $EV_BREAK = 0x0040&lt;br /&gt;
Global Const $EV_ERR = 0x0080&lt;br /&gt;
Global Const $EV_RING = 0x0100&lt;br /&gt;
Global Const $EV_PERR = 0x0200&lt;br /&gt;
Global Const $EV_RX80FULL = 0x0400&lt;br /&gt;
Global Const $EV_EVENT1 = 0x0800&lt;br /&gt;
Global Const $EV_EVENT2 = 0x1000&lt;br /&gt;
&lt;br /&gt;
Global Const $MS_CTS_ON = 0x0010&lt;br /&gt;
Global Const $MS_DSR_ON = 0x0020&lt;br /&gt;
Global Const $MS_RING_ON = 0x0040&lt;br /&gt;
Global Const $MS_RLSD_ON = 0x0080&lt;br /&gt;
&lt;br /&gt;
Global Const $PURGE_TXABORT = 0x0001&lt;br /&gt;
Global Const $PURGE_RXABORT = 0x0002&lt;br /&gt;
Global Const $PURGE_TXCLEAR = 0x0004&lt;br /&gt;
Global Const $PURGE_RXCLEAR = 0x0008&lt;br /&gt;
Global Const $PURGE_ALL = 0x000F&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommObsolete.au3&amp;diff=12363</id>
		<title>CommObsolete.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommObsolete.au3&amp;diff=12363"/>
		<updated>2014-04-07T11:00:29Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:CommAPI]][[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommObsolete.au3&lt;br /&gt;
; Version Date ..: 2014-04-07&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommInterface.au3&amp;quot;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
Func _CommAPI_ReceiveData(Const $hFile, Const $iTimeout = 1, Const $iMaxLength = 0)&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveString($hFile, $iTimeout, $iMaxLength)&lt;br /&gt;
	If @error Then SetError(@error, @extended, $sResult)&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func _CommAPI_ReceiveLine(Const $hFile, Const $sSeparator = @CRLF, Const $iTimeout = 1, Const $iMaxLength = 0)&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveString($hFile, $iTimeout, $iMaxLength, $sSeparator)&lt;br /&gt;
	If @error Then SetError(@error, @extended, $sResult)&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func _CommAPI_TransmitData(Const $hFile, Const $vData)&lt;br /&gt;
	Local $iWritten = _CommAPI_TransmitBinary($hFile, $vData)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, $iWritten)&lt;br /&gt;
	Return $iWritten&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommObsolete.au3&amp;diff=12362</id>
		<title>CommObsolete.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommObsolete.au3&amp;diff=12362"/>
		<updated>2014-04-07T10:59:40Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: Create CommObsolete.au3 for backward compatibility&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommObsolete.au3&lt;br /&gt;
; Version Date ..: 2014-04-07&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommInterface.au3&amp;quot;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
Func _CommAPI_ReceiveData(Const $hFile, Const $iTimeout = 1, Const $iMaxLength = 0)&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveString($hFile, $iTimeout, $iMaxLength)&lt;br /&gt;
	If @error Then SetError(@error, @extended, $sResult)&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func _CommAPI_ReceiveLine(Const $hFile, Const $sSeparator = @CRLF, Const $iTimeout = 1, Const $iMaxLength = 0)&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveString($hFile, $iTimeout, $iMaxLength, $sSeparator)&lt;br /&gt;
	If @error Then SetError(@error, @extended, $sResult)&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func _CommAPI_TransmitData(Const $hFile, Const $vData)&lt;br /&gt;
	Local $iWritten = _CommAPI_TransmitBinary($hFile, $vData)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, $iWritten)&lt;br /&gt;
	Return $iWritten&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12361</id>
		<title>CommAPI</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12361"/>
		<updated>2014-04-07T10:58:50Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: /* Scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CommAPI translates the communications functions of Windows API to AutoIt functions.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
=== Features ===&lt;br /&gt;
* No need to install DLL&#039;s&lt;br /&gt;
* Using Windows API calls (kernel32.dll)&lt;br /&gt;
* Possibility of serial communication (serial port, COM port, RS-232)&lt;br /&gt;
* Possibility of parallel communication (parallel port, LPT port)&lt;br /&gt;
* No use of global variables&lt;br /&gt;
* Uniform namespace _CommAPI_XXX&lt;br /&gt;
* Modular organization into files&lt;br /&gt;
* A lot of additional utility and helper functions&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
* [[CommAPIConstants.au3]]&lt;br /&gt;
* [[CommAPI.au3]]&lt;br /&gt;
* [[CommAPIHelper.au3]]&lt;br /&gt;
* [[CommUtilities.au3]]&lt;br /&gt;
* [[CommInterface.au3]]&lt;br /&gt;
* [[CommObsolete.au3]] (only needed for backward compatibility)&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
[[CommAPI Examples]] shows you some examples. Mayby you could find more examples in [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/?p=1126366 forum].&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
=== History ===&lt;br /&gt;
* 2008-09-12 Creation of cfx.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/#entry578111 (V1.0)]&lt;br /&gt;
* 2011-02-18 Conversation of cfx.au3 into cfxUDF.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry872154 (V2.0)]&lt;br /&gt;
* 2011-02-28 Update V2.0to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry874547 V2.1]&lt;br /&gt;
* 2011-04-27 Update V2.1 to [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=217993#post217993 V2.2] (german forum)&lt;br /&gt;
* 2013-07-10 Modify V2.1 to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry1094288 V2.1mod]&lt;br /&gt;
* 2013-10-24 Creation of [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ CommAPI.au3]&lt;br /&gt;
&lt;br /&gt;
=== Changelog ===&lt;br /&gt;
; 2014-01-23&lt;br /&gt;
: Small update of method _CommAPI_CreateModeString&lt;br /&gt;
; 2014-02-03&lt;br /&gt;
: Change timeout handling (Attention: not backward compatible)&lt;br /&gt;
: Small update of method _CommAPI_PurgeComm&lt;br /&gt;
; 2014-03-07&lt;br /&gt;
: Rename CommAPIStructures.au3 to CommAPIConstants.au3&lt;br /&gt;
: Replace hex values with Constants&lt;br /&gt;
; 2014-03-27&lt;br /&gt;
: Update of call _WinAPI_CreateFile&lt;br /&gt;
: Updated @error handling&lt;br /&gt;
: New parameter MaxLen for function _CommAPI_ReceiveData&lt;br /&gt;
: New function _CommAPI_ReceiveLine&lt;br /&gt;
: Update existing examples and add new examples&lt;br /&gt;
; 2014-03-31&lt;br /&gt;
: Add constants&lt;br /&gt;
: Fix _CommAPI_WaitCommEvent&lt;br /&gt;
; 2014-04-03&lt;br /&gt;
: Fix reading error Chr(128) to Chr(255)&lt;br /&gt;
: Fix error in _CommAPI_TransmitData&lt;br /&gt;
; 2014-04-04&lt;br /&gt;
: Replace ReceiveData &amp;amp; ReceiveLine with ReceiveBinary &amp;amp; ReceiveString&lt;br /&gt;
; 2014-04-07&lt;br /&gt;
: replace _CommAPI_TransmitData with _CommAPI_TransmitBinary &amp;amp; _CommAPI_TransmitString&lt;br /&gt;
: Create CommObsolete.au3 for backward compatibility&lt;br /&gt;
&lt;br /&gt;
=== Roadmap ===&lt;br /&gt;
There is no roadmap in the moment. Feel free to implement the last five remaining API calls, enhance the scripts or to fix bugs.&lt;br /&gt;
&lt;br /&gt;
=== Support ===&lt;br /&gt;
There is no official support. Try to get help from community in the official forum. [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ Here you can find the main thread].&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx MSDN Library of communications functions]&lt;br /&gt;
* [http://www.hpcc.ecs.soton.ac.uk/software/Win32API.Txt WIN32API.TXT]&lt;br /&gt;
* cfxUDF.au3 (see section above)&lt;br /&gt;
* [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=198669#post198669 GetCOMPorts] (german forum)&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/19713-problem-with-struct/#entry136466 ParseCommState]&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== Implemented API functions ===&lt;br /&gt;
* BuildCommDCB&lt;br /&gt;
* BuildCommDCBAndTimeouts&lt;br /&gt;
* ClearCommBreak&lt;br /&gt;
* ClearCommError&lt;br /&gt;
* EscapeCommFunction&lt;br /&gt;
* GetCommMask&lt;br /&gt;
* GetCommModemStatus&lt;br /&gt;
* GetCommProperties&lt;br /&gt;
* GetCommState&lt;br /&gt;
* GetCommTimeouts&lt;br /&gt;
* PurgeComm&lt;br /&gt;
* SetCommBreak&lt;br /&gt;
* SetCommMask&lt;br /&gt;
* SetCommState&lt;br /&gt;
* SetCommTimeouts&lt;br /&gt;
* SetupComm&lt;br /&gt;
* TransmitCommChar&lt;br /&gt;
* WaitCommEvent&lt;br /&gt;
&lt;br /&gt;
=== Unimplemented API functions ===&lt;br /&gt;
* CommConfigDialog&lt;br /&gt;
* GetCommConfig&lt;br /&gt;
* GetDefaultCommConfig&lt;br /&gt;
* SetCommConfig&lt;br /&gt;
* SetDefaultCommConfig&lt;br /&gt;
&lt;br /&gt;
=== API helper functions ===&lt;br /&gt;
* ChangeCommStateElement&lt;br /&gt;
* ChangeCommTimeoutsElement&lt;br /&gt;
* GetCommStateElement&lt;br /&gt;
* GetCommTimeoutsElement&lt;br /&gt;
* IsOnCTS&lt;br /&gt;
* IsOnDCD&lt;br /&gt;
* IsOnDSR&lt;br /&gt;
* IsOnRI&lt;br /&gt;
* SetCommStateElement&lt;br /&gt;
* SetCommTimeoutsElement&lt;br /&gt;
* SetOnDTR&lt;br /&gt;
* SetOnRTS&lt;br /&gt;
&lt;br /&gt;
=== Utility functions ===&lt;br /&gt;
* CommStateToString&lt;br /&gt;
* CommTimeoutsToString&lt;br /&gt;
* CreateModeString&lt;br /&gt;
* GetCOMPorts&lt;br /&gt;
&lt;br /&gt;
=== Interface functions ===&lt;br /&gt;
* ClosePort&lt;br /&gt;
* OpenCOMPort&lt;br /&gt;
* OpenPort&lt;br /&gt;
* ReceiveBinary&lt;br /&gt;
* ReceiveString&lt;br /&gt;
* TransmitData&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12360</id>
		<title>CommAPI</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12360"/>
		<updated>2014-04-07T10:58:15Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: /* Changelog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CommAPI translates the communications functions of Windows API to AutoIt functions.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
=== Features ===&lt;br /&gt;
* No need to install DLL&#039;s&lt;br /&gt;
* Using Windows API calls (kernel32.dll)&lt;br /&gt;
* Possibility of serial communication (serial port, COM port, RS-232)&lt;br /&gt;
* Possibility of parallel communication (parallel port, LPT port)&lt;br /&gt;
* No use of global variables&lt;br /&gt;
* Uniform namespace _CommAPI_XXX&lt;br /&gt;
* Modular organization into files&lt;br /&gt;
* A lot of additional utility and helper functions&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
* [[CommAPIConstants.au3]]&lt;br /&gt;
* [[CommAPI.au3]]&lt;br /&gt;
* [[CommAPIHelper.au3]]&lt;br /&gt;
* [[CommUtilities.au3]]&lt;br /&gt;
* [[CommInterface.au3]]&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
[[CommAPI Examples]] shows you some examples. Mayby you could find more examples in [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/?p=1126366 forum].&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
=== History ===&lt;br /&gt;
* 2008-09-12 Creation of cfx.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/#entry578111 (V1.0)]&lt;br /&gt;
* 2011-02-18 Conversation of cfx.au3 into cfxUDF.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry872154 (V2.0)]&lt;br /&gt;
* 2011-02-28 Update V2.0to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry874547 V2.1]&lt;br /&gt;
* 2011-04-27 Update V2.1 to [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=217993#post217993 V2.2] (german forum)&lt;br /&gt;
* 2013-07-10 Modify V2.1 to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry1094288 V2.1mod]&lt;br /&gt;
* 2013-10-24 Creation of [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ CommAPI.au3]&lt;br /&gt;
&lt;br /&gt;
=== Changelog ===&lt;br /&gt;
; 2014-01-23&lt;br /&gt;
: Small update of method _CommAPI_CreateModeString&lt;br /&gt;
; 2014-02-03&lt;br /&gt;
: Change timeout handling (Attention: not backward compatible)&lt;br /&gt;
: Small update of method _CommAPI_PurgeComm&lt;br /&gt;
; 2014-03-07&lt;br /&gt;
: Rename CommAPIStructures.au3 to CommAPIConstants.au3&lt;br /&gt;
: Replace hex values with Constants&lt;br /&gt;
; 2014-03-27&lt;br /&gt;
: Update of call _WinAPI_CreateFile&lt;br /&gt;
: Updated @error handling&lt;br /&gt;
: New parameter MaxLen for function _CommAPI_ReceiveData&lt;br /&gt;
: New function _CommAPI_ReceiveLine&lt;br /&gt;
: Update existing examples and add new examples&lt;br /&gt;
; 2014-03-31&lt;br /&gt;
: Add constants&lt;br /&gt;
: Fix _CommAPI_WaitCommEvent&lt;br /&gt;
; 2014-04-03&lt;br /&gt;
: Fix reading error Chr(128) to Chr(255)&lt;br /&gt;
: Fix error in _CommAPI_TransmitData&lt;br /&gt;
; 2014-04-04&lt;br /&gt;
: Replace ReceiveData &amp;amp; ReceiveLine with ReceiveBinary &amp;amp; ReceiveString&lt;br /&gt;
; 2014-04-07&lt;br /&gt;
: replace _CommAPI_TransmitData with _CommAPI_TransmitBinary &amp;amp; _CommAPI_TransmitString&lt;br /&gt;
: Create CommObsolete.au3 for backward compatibility&lt;br /&gt;
&lt;br /&gt;
=== Roadmap ===&lt;br /&gt;
There is no roadmap in the moment. Feel free to implement the last five remaining API calls, enhance the scripts or to fix bugs.&lt;br /&gt;
&lt;br /&gt;
=== Support ===&lt;br /&gt;
There is no official support. Try to get help from community in the official forum. [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ Here you can find the main thread].&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx MSDN Library of communications functions]&lt;br /&gt;
* [http://www.hpcc.ecs.soton.ac.uk/software/Win32API.Txt WIN32API.TXT]&lt;br /&gt;
* cfxUDF.au3 (see section above)&lt;br /&gt;
* [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=198669#post198669 GetCOMPorts] (german forum)&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/19713-problem-with-struct/#entry136466 ParseCommState]&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== Implemented API functions ===&lt;br /&gt;
* BuildCommDCB&lt;br /&gt;
* BuildCommDCBAndTimeouts&lt;br /&gt;
* ClearCommBreak&lt;br /&gt;
* ClearCommError&lt;br /&gt;
* EscapeCommFunction&lt;br /&gt;
* GetCommMask&lt;br /&gt;
* GetCommModemStatus&lt;br /&gt;
* GetCommProperties&lt;br /&gt;
* GetCommState&lt;br /&gt;
* GetCommTimeouts&lt;br /&gt;
* PurgeComm&lt;br /&gt;
* SetCommBreak&lt;br /&gt;
* SetCommMask&lt;br /&gt;
* SetCommState&lt;br /&gt;
* SetCommTimeouts&lt;br /&gt;
* SetupComm&lt;br /&gt;
* TransmitCommChar&lt;br /&gt;
* WaitCommEvent&lt;br /&gt;
&lt;br /&gt;
=== Unimplemented API functions ===&lt;br /&gt;
* CommConfigDialog&lt;br /&gt;
* GetCommConfig&lt;br /&gt;
* GetDefaultCommConfig&lt;br /&gt;
* SetCommConfig&lt;br /&gt;
* SetDefaultCommConfig&lt;br /&gt;
&lt;br /&gt;
=== API helper functions ===&lt;br /&gt;
* ChangeCommStateElement&lt;br /&gt;
* ChangeCommTimeoutsElement&lt;br /&gt;
* GetCommStateElement&lt;br /&gt;
* GetCommTimeoutsElement&lt;br /&gt;
* IsOnCTS&lt;br /&gt;
* IsOnDCD&lt;br /&gt;
* IsOnDSR&lt;br /&gt;
* IsOnRI&lt;br /&gt;
* SetCommStateElement&lt;br /&gt;
* SetCommTimeoutsElement&lt;br /&gt;
* SetOnDTR&lt;br /&gt;
* SetOnRTS&lt;br /&gt;
&lt;br /&gt;
=== Utility functions ===&lt;br /&gt;
* CommStateToString&lt;br /&gt;
* CommTimeoutsToString&lt;br /&gt;
* CreateModeString&lt;br /&gt;
* GetCOMPorts&lt;br /&gt;
&lt;br /&gt;
=== Interface functions ===&lt;br /&gt;
* ClosePort&lt;br /&gt;
* OpenCOMPort&lt;br /&gt;
* OpenPort&lt;br /&gt;
* ReceiveBinary&lt;br /&gt;
* ReceiveString&lt;br /&gt;
* TransmitData&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12359</id>
		<title>CommInterface.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12359"/>
		<updated>2014-04-07T10:56:38Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: replace _CommAPI_TransmitData with _CommAPI_TransmitBinary and _CommAPI_TransmitString&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommInterface.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-04-07&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPIHelper.au3&amp;quot;&lt;br /&gt;
#include &amp;quot;CommUtilities.au3&amp;quot;&lt;br /&gt;
#include &amp;lt;WinAPI.au3&amp;gt;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClosePort&lt;br /&gt;
; Description ...: CLoses a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
	Local $fSuccess = _WinAPI_CloseHandle($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, 0, False)&lt;br /&gt;
	If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return $fSuccess&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClosePort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenCOMPort&lt;br /&gt;
; Description ...: Opens a COM Port.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenCOMPort(Const $iPort[, $iBaudRate = Default[, $iParity = Default[, $iByteSize = Default[,&lt;br /&gt;
;                  $iStopBits = Default]]]])&lt;br /&gt;
; Parameters ....: $iPort               - [in] A port number.&lt;br /&gt;
;                  $iBaudRate           - [in] The baud rate at which the communications device operates.&lt;br /&gt;
;                  $iParity             - [in] The parity scheme to be used.&lt;br /&gt;
;                  $iByteSize           - [in] Specifies the number of data bits in a character.&lt;br /&gt;
;                  $iStopBits           - [in] Specifies the number of stop bits that define the end of a character: 1, 1.5, or 2.&lt;br /&gt;
; Return values .: Success - Open handle to a specified communications device&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                            11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort, _CommAPI_ClosePort, _CommAPI_CreateModeString&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenCOMPort(Const $iPort, Const $iBaudRate = Default, Const $iParity = Default, Const $iByteSize = Default, Const $iStopBits = Default)&lt;br /&gt;
	Local $sMode = _CommAPI_CreateModeString($iPort, $iBaudRate, $iParity, $iByteSize, $iStopBits)&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($sMode)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenCOMPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenPort&lt;br /&gt;
; Description ...: Opens a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
; Return values .: Success - Open handle to a specified communications device&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                            11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenCOMPort, _CommAPI_ClosePort, _CommAPI_SetCommState&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365430(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
	Local $sFileName = &amp;quot;\\.\&amp;quot; &amp;amp; StringLeft($sMode, StringInStr($sMode, &amp;quot;:&amp;quot;) - 1)&lt;br /&gt;
	Local $hFile = _WinAPI_CreateFile($sFileName, 3, 6)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If $hFile &amp;lt;= 0 Then Return SetError(-1, @ScriptLineNumber, 0)&lt;br /&gt;
&lt;br /&gt;
	Local $tDCB = DllStructCreate($tagDCB)&lt;br /&gt;
	Local $tCommTimeouts = DllStructCreate($tagCOMMTIMEOUTS)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_BuildCommDCB($sMode, $tDCB)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;ReadTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;WriteTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	If Not _CommAPI_SetCommState($hFile, $tDCB) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	If Not _CommAPI_SetCommTimeouts($hFile, $tCommTimeouts) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveBinary&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveBinary(Const $hFile[, $iTimeout = 1[, $iMaxLength = 0[, $vSeparator = &amp;quot;&amp;quot;]]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLength          - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $vSeparator          - [in] A value which is used as a separator.&lt;br /&gt;
;                                              Is activated only by non-empty values.&lt;br /&gt;
; Return values .: Success - Received binary data&lt;br /&gt;
;                  Failure - Received binary data&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveString, _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveBinary(Const $hFile, Const $iTimeout = 1, Const $iMaxLength = 0, Const $vSeparator = &amp;quot;&amp;quot;)&lt;br /&gt;
	Local $bSeparator = Binary($vSeparator)&lt;br /&gt;
	Local $iSepLength = BinaryLen($bSeparator)&lt;br /&gt;
	Local $fSuccess = False&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;BYTE&amp;quot;)&lt;br /&gt;
	Local $pBuffer = DllStructGetPtr($tBuffer)&lt;br /&gt;
	Local $iRead = 0&lt;br /&gt;
	Local $vResult = Binary(&amp;quot;&amp;quot;)&lt;br /&gt;
	Local $iResLength = 0&lt;br /&gt;
	Local $hTimer = TimerInit()&lt;br /&gt;
	While True&lt;br /&gt;
		$fSuccess = _WinAPI_ReadFile($hFile, $pBuffer, 1, $iRead)&lt;br /&gt;
		If @error Then Return SetError(@error, @ScriptLineNumber, $vResult)&lt;br /&gt;
		If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, $vResult)&lt;br /&gt;
		If $iRead Then&lt;br /&gt;
			$vResult &amp;amp;= BinaryMid(Binary(DllStructGetData($tBuffer, 1)), 1, 1)&lt;br /&gt;
			$iResLength = BinaryLen($vResult)&lt;br /&gt;
			If $iResLength = $iMaxLength And $iMaxLength &amp;gt; 0 Then Return $vResult&lt;br /&gt;
			If $bSeparator = BinaryMid($vResult, 1 + $iResLength - $iSepLength) Then Return BinaryMid($vResult, 1, $iResLength - $iSepLength)&lt;br /&gt;
		Else&lt;br /&gt;
			If $vResult And Not $iSepLength Then Return $vResult&lt;br /&gt;
			If $iTimeout &amp;gt; 0 And $iTimeout &amp;lt; TimerDiff($hTimer) Then Return SetError(-2, @ScriptLineNumber, $vResult)&lt;br /&gt;
		EndIf&lt;br /&gt;
	WEnd&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ReceiveBinary&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveString&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveString(Const $hFile[, $iTimeout = 1[, $iMaxLength = 0[, $sSeparator = &amp;quot;&amp;quot;]]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLength          - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $sSeparator          - [in] A value which is used as a separator.&lt;br /&gt;
;                                              Is activated only by non-empty values.&lt;br /&gt;
;                  $iFlag               - [in] Flag for function BinaryToString().&lt;br /&gt;
; Return values .: Success - Received string&lt;br /&gt;
;                  Failure - Received string&lt;br /&gt;
;                            Received binary data in case of @error = -3&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
;                           -3 error in BinaryToString&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveBinary, _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveString(Const $hFile, Const $iTimeout = 1, Const $iMaxLength = 0, Const $sSeparator = &amp;quot;&amp;quot;, Const $iFlag = 1)&lt;br /&gt;
	Local $bResult = _CommAPI_ReceiveBinary($hFile, $iTimeout, $iMaxLength, StringToBinary($sSeparator, $iFlag))&lt;br /&gt;
	Local $iError = @error&lt;br /&gt;
	Local $iExtended = @extended&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	If $bResult Then&lt;br /&gt;
		$sResult = BinaryToString($bResult, $iFlag)&lt;br /&gt;
		If @error Then SetError(-3, @ScriptLineNumber, $bResult)&lt;br /&gt;
	EndIf&lt;br /&gt;
	Return SetError($iError, $iExtended, $sResult)&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ReceiveString&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitBinary&lt;br /&gt;
; Description ...: Transmits data (TxD/TX/TD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $vData               - [in] A binary value to transmit.&lt;br /&gt;
; Return values .: Success - Number of written bytes&lt;br /&gt;
;                  Failure - Number of written bytes&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_TransmitString, _CommAPI_ReceiveBinary&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitBinary(Const $hFile, Const $vData)&lt;br /&gt;
	Local $bData = Binary($vData)&lt;br /&gt;
	Local $iLength = BinaryLen($vData)&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;BYTE[&amp;quot; &amp;amp; $iLength &amp;amp; &amp;quot;]&amp;quot;)&lt;br /&gt;
	DllStructSetData($tBuffer, 1, $bData)&lt;br /&gt;
	Local $fSuccess = _WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), $iLength, $iWritten)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, $iWritten)&lt;br /&gt;
	Return $iWritten&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_TransmitBinary&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitString&lt;br /&gt;
; Description ...: Transmits data (TxD/TX/TD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sData               - [in] A string value to transmit.&lt;br /&gt;
;                  $iFlag               - [in] Flag for function StringToBinary().&lt;br /&gt;
; Return values .: Success - Number of written bytes&lt;br /&gt;
;                  Failure - Number of written bytes&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_TransmitBinary, _CommAPI_ReceiveString&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitString(Const $hFile, Const $sData, Const $iFlag = 1)&lt;br /&gt;
	Local $iWritten = _CommAPI_TransmitBinary($hFile, StringToBinary($sData, $iFlag))&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, $iWritten)&lt;br /&gt;
	Return $iWritten&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI.au3&amp;diff=12356</id>
		<title>CommAPI.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI.au3&amp;diff=12356"/>
		<updated>2014-04-04T14:44:22Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: some small updates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommAPI.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-04-04&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPIConstants.au3&amp;quot;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_BuildCommDCB&lt;br /&gt;
; Description ...: Fills a specified DCB structure with values specified in a device-control string.&lt;br /&gt;
; Syntax ........: _CommAPI_BuildCommDCB(Const $sMode, Byref $tDBC)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
;                  $tDBC                - [out] A DCB structure.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_BuildCommDCBAndTimeouts, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363143(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_BuildCommDCB(Const $sMode, ByRef $tDBC)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;BuildCommDCB&amp;quot;, &amp;quot;str&amp;quot;, $sMode, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDBC))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_BuildCommDCB&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_BuildCommDCBAndTimeouts&lt;br /&gt;
; Description ...: Translates a device-definition string into appropriate device-control block codes and places them into a device control block.&lt;br /&gt;
;                  The function can also set up time-out values for a device.&lt;br /&gt;
; Syntax ........: _CommAPI_BuildCommDCBAndTimeouts(Const $sMode, Byref $tDBC, Byref $tCommTimeouts)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
;                  $tDBC                - [out] A DCB structure.&lt;br /&gt;
;                  $tCommTimeouts       - [out] A COMMTIMEOUTS structure.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_BuildCommDCB, $tagDCB, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363145(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_BuildCommDCBAndTimeouts(Const $sMode, ByRef $tDBC, ByRef $tCommTimeouts)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;BuildCommDCBAndTimeouts&amp;quot;, &amp;quot;str&amp;quot;, $sMode, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDBC), &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_BuildCommDCBAndTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClearCommBreak&lt;br /&gt;
; Description ...: Restores character transmission for a specified communications device and places the transmission line in a nonbreak state.&lt;br /&gt;
; Syntax ........: _CommAPI_ClearCommBreak(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ClearCommError&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363179(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClearCommBreak(Const $hFile)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;ClearCommBreak&amp;quot;, &amp;quot;handle&amp;quot;, $hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClearCommBreak&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClearCommError&lt;br /&gt;
; Description ...: Retrieves information about a communications error and reports the current status of a communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ClearCommError(Const $hFile[, $tComStat = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tComStat            - [out] A COMSTAT structure in which the device&#039;s status information is returned.&lt;br /&gt;
; Return values .: Success - A mask indicating the type of error.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ClearCommBreak, $tagCOMSTAT&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363180(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClearCommError(Const $hFile, $tComStat = 0)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;ClearCommError&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tComStat))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If Not $aResult[0] Then SetError(-1, @ScriptLineNumber)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClearCommError&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_EscapeCommFunction&lt;br /&gt;
; Description ...: Directs the specified communications device to perform an extended function.&lt;br /&gt;
; Syntax ........: _CommAPI_EscapeCommFunction(Const $hFile, Const $iFunction)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iFunction           - [in] The extended function to be performed.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetOnDTR, _CommAPI_SetOnRTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363254(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_EscapeCommFunction(Const $hFile, Const $iFunction)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;EscapeCommFunction&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iFunction)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_EscapeCommFunction&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommMask&lt;br /&gt;
; Description ...: Retrieves the value of the event mask for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommMask(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - A mask of events that are currently enabled.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363257(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommMask(Const $hFile)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommMask&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If Not $aResult[0] Then SetError(-1, @ScriptLineNumber)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommMask&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Description ...: Retrieves the modem control-register values.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommModemStatus(Const $hFile, Byref $pModemStatus)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - The current state of the modem control-register values.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_IsOnCTS, _CommAPI_IsOnDSR, _CommAPI_IsOnRI, _CommAPI_IsOnDCD, _CommAPI_WaitCommEvent&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommModemStatus(Const $hFile)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommModemStatus&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If Not $aResult[0] Then SetError(-1, @ScriptLineNumber)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommModemStatus&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommProperties&lt;br /&gt;
; Description ...: Retrieves information about the communications properties for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommProperties(Const $hFile[, $tCOMMPROP = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCOMMPROP           - [out] A COMMPROP structure in which the communications properties information is returned.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363259(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommProperties(Const $hFile, $tCOMMPROP = 0)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommProperties&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCOMMPROP))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommProperties&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommState&lt;br /&gt;
; Description ...: Retrieves the current control settings for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommState(Const $hFile, $tDCB = 0)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tDCB                - [out] A DCB structure that receives the control settings information.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommState, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363260(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommState(Const $hFile, $tDCB = 0)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommState&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDCB))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommState&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommTimeouts&lt;br /&gt;
; Description ...: Retrieves the time-out parameters for all read and write operations on a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommTimeouts(Const $hFile, $tCommTimeouts = 0)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCommTimeouts       - [out] A COMMTIMEOUTS structure in which the time-out information is returned.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommTimeouts, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363261(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommTimeouts(Const $hFile, $tCommTimeouts = 0)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommTimeouts&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_PurgeComm&lt;br /&gt;
; Description ...: Discards all characters from the output or input buffer of a specified communications resource.&lt;br /&gt;
;                  It can also terminate pending read or write operations on the resource.&lt;br /&gt;
; Syntax ........: _CommAPI_PurgeComm(Const $hFile[, $iFlags = $PURGE_ALL])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iFlags              - [in] An integer value.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363428(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_PurgeComm(Const $hFile, Const $iFlags = $PURGE_ALL)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;PurgeComm&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iFlags)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_PurgeComm&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommBreak&lt;br /&gt;
; Description ...: Suspends character transmission for a specified communications device and places the transmission line in a break state until the ClearCommBreak function is called.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommBreak(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363433(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommBreak(Const $hFile)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommBreak&amp;quot;, &amp;quot;handle&amp;quot;, $hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommBreak&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommMask&lt;br /&gt;
; Description ...: Specifies a set of events to be monitored for a communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommMask(Const $hFile, Const $iEventMask)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iEventMask          - [in] The events to be enabled. A value of zero disables all events.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363435(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommMask(Const $hFile, Const $iEventMask)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommMask&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iEventMask)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommMask&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommState&lt;br /&gt;
; Description ...: Configures a communications device according to the specifications in a device-control block.&lt;br /&gt;
;                  The function reinitializes all hardware and control settings, but it does not empty output or input queues.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommState(Const $hFile, Const $tDCB)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tDCB                - [in] A DCB structure that contains the configuration information for the specified communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommState, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363436(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommState(Const $hFile, Const $tDCB)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommState&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDCB))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommState&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommTimeouts&lt;br /&gt;
; Description ...: Sets the time-out parameters for all read and write operations on a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommTimeouts(Const $hFile, Const $tCommTimeouts)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCommTimeouts       - [in] A COMMTIMEOUTS structure that contains the new time-out values.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommTimeouts, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363437(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommTimeouts(Const $hFile, Const $tCommTimeouts)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommTimeouts&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetupComm&lt;br /&gt;
; Description ...: Initializes the communications parameters for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetupComm(Const $hFile, Const $iInQueue, Const $iOutQueue)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iInQueue            - [in] The recommended size of the device&#039;s internal input buffer, in bytes.&lt;br /&gt;
;                  $iOutQueue           - [in] The recommended size of the device&#039;s internal output buffer, in bytes.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363439(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetupComm(Const $hFile, Const $iInQueue, Const $iOutQueue)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetupComm&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iInQueue, &amp;quot;dword&amp;quot;, $iOutQueue)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetupComm&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitCommChar&lt;br /&gt;
; Description ...: Transmits a specified character ahead of any pending data in the output buffer of the specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitCommChar(Const $hFile, Const $cChar)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sChar               - [in] The character to be transmitted.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363473(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitCommChar(Const $hFile, Const $cChar)&lt;br /&gt;
	Local $tChar = DllStructCreate(&amp;quot;char&amp;quot;)&lt;br /&gt;
	DllStructSetData($tChar, 1, $cChar)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;TransmitCommChar&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;char&amp;quot;, $tChar)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_TransmitCommChar&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_WaitCommEvent&lt;br /&gt;
; Description ...: Waits for an event to occur for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_WaitCommEvent(Const $hFile [, Const $tOverlapped = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tOverlapped         - [in] An OVERLAPPED structure.&lt;br /&gt;
; Return values .: Success - A mask indicating the type of event that occurred.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_EscapeCommFunction, _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363479(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_WaitCommEvent(Const $hFile, Const $tOverlapped = 0)&lt;br /&gt;
	Local $pOverlapped = DllStructGetPtr($tOverlapped)&lt;br /&gt;
	If Not $pOverlapped Then $pOverlapped = DllStructGetPtr(DllStructCreate($tagOverlapped))&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;WaitCommEvent&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0, &amp;quot;ptr&amp;quot;, $pOverlapped)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If Not $aResult[2] Then Return SetError(-1, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_WaitCommEvent&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12355</id>
		<title>CommInterface.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12355"/>
		<updated>2014-04-04T14:33:03Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommInterface.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-04-04&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPIHelper.au3&amp;quot;&lt;br /&gt;
#include &amp;quot;CommUtilities.au3&amp;quot;&lt;br /&gt;
#include &amp;lt;WinAPI.au3&amp;gt;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClosePort&lt;br /&gt;
; Description ...: CLoses a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
	Local $fSuccess = _WinAPI_CloseHandle($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, 0, False)&lt;br /&gt;
	If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return $fSuccess&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClosePort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenCOMPort&lt;br /&gt;
; Description ...: Opens a COM Port.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenCOMPort(Const $iPort[, $iBaudRate = Default[, $iParity = Default[, $iByteSize = Default[,&lt;br /&gt;
;                  $iStopBits = Default]]]])&lt;br /&gt;
; Parameters ....: $iPort               - [in] A port number.&lt;br /&gt;
;                  $iBaudRate           - [in] The baud rate at which the communications device operates.&lt;br /&gt;
;                  $iParity             - [in] The parity scheme to be used.&lt;br /&gt;
;                  $iByteSize           - [in] Specifies the number of data bits in a character.&lt;br /&gt;
;                  $iStopBits           - [in] Specifies the number of stop bits that define the end of a character: 1, 1.5, or 2.&lt;br /&gt;
; Return values .: Success - Open handle to a specified communications device&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                            11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort, _CommAPI_ClosePort, _CommAPI_CreateModeString&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenCOMPort(Const $iPort, Const $iBaudRate = Default, Const $iParity = Default, Const $iByteSize = Default, Const $iStopBits = Default)&lt;br /&gt;
	Local $sMode = _CommAPI_CreateModeString($iPort, $iBaudRate, $iParity, $iByteSize, $iStopBits)&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($sMode)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenCOMPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenPort&lt;br /&gt;
; Description ...: Opens a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
; Return values .: Success - Open handle to a specified communications device&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                            11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenCOMPort, _CommAPI_ClosePort, _CommAPI_SetCommState&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365430(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
	Local $sFileName = &amp;quot;\\.\&amp;quot; &amp;amp; StringLeft($sMode, StringInStr($sMode, &amp;quot;:&amp;quot;) - 1)&lt;br /&gt;
	Local $hFile = _WinAPI_CreateFile($sFileName, 3, 6)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If $hFile &amp;lt;= 0 Then Return SetError(-1, @ScriptLineNumber, 0)&lt;br /&gt;
&lt;br /&gt;
	Local $tDCB = DllStructCreate($tagDCB)&lt;br /&gt;
	Local $tCommTimeouts = DllStructCreate($tagCOMMTIMEOUTS)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_BuildCommDCB($sMode, $tDCB)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;ReadTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;WriteTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	If Not _CommAPI_SetCommState($hFile, $tDCB) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	If Not _CommAPI_SetCommTimeouts($hFile, $tCommTimeouts) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveBinary&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveBinary(Const $hFile[, $iTimeout = 1[, $iMaxLength = 0[, $vSeparator = &amp;quot;&amp;quot;]]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLength          - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $vSeparator          - [in] A value which is used as a separator.&lt;br /&gt;
;                                              Is activated only by non-empty values.&lt;br /&gt;
; Return values .: Success - Received binary data (including separator)&lt;br /&gt;
;                  Failure - Received binary data&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveString, _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveBinary(Const $hFile, Const $iTimeout = 1, Const $iMaxLength = 0, Const $vSeparator = &amp;quot;&amp;quot;)&lt;br /&gt;
	Local $bSeparator = Binary($vSeparator)&lt;br /&gt;
	Local $iSepLength = BinaryLen($bSeparator)&lt;br /&gt;
	Local $fSuccess = False&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;BYTE&amp;quot;)&lt;br /&gt;
	Local $pBuffer = DllStructGetPtr($tBuffer)&lt;br /&gt;
	Local $iRead = 0&lt;br /&gt;
	Local $vResult = Binary(&amp;quot;&amp;quot;)&lt;br /&gt;
	Local $iResLength = 0&lt;br /&gt;
	Local $hTimer = TimerInit()&lt;br /&gt;
	While True&lt;br /&gt;
		$fSuccess = _WinAPI_ReadFile($hFile, $pBuffer, 1, $iRead)&lt;br /&gt;
		If @error Then Return SetError(@error, @ScriptLineNumber, $vResult)&lt;br /&gt;
		If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, $vResult)&lt;br /&gt;
		If $iRead Then&lt;br /&gt;
			$vResult &amp;amp;= BinaryMid(Binary(DllStructGetData($tBuffer, 1)), 1, 1)&lt;br /&gt;
			$iResLength = BinaryLen($vResult)&lt;br /&gt;
			If $iResLength = $iMaxLength And $iMaxLength &amp;gt; 0 Then Return $vResult&lt;br /&gt;
			If $bSeparator = BinaryMid($vResult, 1 + $iResLength - $iSepLength) Then Return $vResult&lt;br /&gt;
		Else&lt;br /&gt;
			If $vResult And Not $iSepLength Then Return $vResult&lt;br /&gt;
			If $iTimeout &amp;gt; 0 And $iTimeout &amp;lt; TimerDiff($hTimer) Then Return SetError(-2, @ScriptLineNumber, $vResult)&lt;br /&gt;
		EndIf&lt;br /&gt;
	WEnd&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ReceiveBinary&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveString&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveString(Const $hFile[, $iTimeout = 1[, $iMaxLength = 0[, $sSeparator = &amp;quot;&amp;quot;]]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLength          - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $sSeparator          - [in] A value which is used as a separator.&lt;br /&gt;
;                                              Is activated only by non-empty values.&lt;br /&gt;
;                  $iFlag               - [in] Flag for function BinaryToString().&lt;br /&gt;
; Return values .: Success - Received string (including separator)&lt;br /&gt;
;                  Failure - Received string&lt;br /&gt;
;                            Received binary data in case of @error = -3&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
;                           -3 error in BinaryToString&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveBinary, _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveString(Const $hFile, Const $iTimeout = 1, Const $iMaxLength = 0, Const $sSeparator = &amp;quot;&amp;quot;, Const $iFlag = 1)&lt;br /&gt;
	Local $bResult = _CommAPI_ReceiveBinary($hFile, $iTimeout, $iMaxLength, StringToBinary($sSeparator, $iFlag))&lt;br /&gt;
	Local $iError = @error&lt;br /&gt;
	Local $iExtended = @extended&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	If $bResult Then&lt;br /&gt;
		$sResult = BinaryToString($bResult, $iFlag)&lt;br /&gt;
		If @error Then SetError(-3, @ScriptLineNumber, $bResult)&lt;br /&gt;
	EndIf&lt;br /&gt;
	Return SetError($iError, $iExtended, $sResult)&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ReceiveString&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitData&lt;br /&gt;
; Description ...: Transmits data (TxD/TX/TD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $vData               - [in] A string value to transmit.&lt;br /&gt;
; Return values .: Success - Number of written bytes&lt;br /&gt;
;                  Failure - Number of written bytes&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveBinary, _CommAPI_ReceiveString&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitData(Const $hFile, Const $vData)&lt;br /&gt;
	Local $bData = Binary($vData)&lt;br /&gt;
	Local $iLength = BinaryLen($vData)&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;BYTE[&amp;quot; &amp;amp; $iLength &amp;amp; &amp;quot;]&amp;quot;)&lt;br /&gt;
	DllStructSetData($tBuffer, 1, $bData)&lt;br /&gt;
	Local $fSuccess = _WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), $iLength, $iWritten)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, $iWritten)&lt;br /&gt;
	Return $iWritten&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_TransmitData&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12354</id>
		<title>CommAPI</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12354"/>
		<updated>2014-04-04T14:17:10Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: replace ReceiveData &amp;amp; ReceiveLine with ReceiveBinary &amp;amp; ReceiveString&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CommAPI translates the communications functions of Windows API to AutoIt functions.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
=== Features ===&lt;br /&gt;
* No need to install DLL&#039;s&lt;br /&gt;
* Using Windows API calls (kernel32.dll)&lt;br /&gt;
* Possibility of serial communication (serial port, COM port, RS-232)&lt;br /&gt;
* Possibility of parallel communication (parallel port, LPT port)&lt;br /&gt;
* No use of global variables&lt;br /&gt;
* Uniform namespace _CommAPI_XXX&lt;br /&gt;
* Modular organization into files&lt;br /&gt;
* A lot of additional utility and helper functions&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
* [[CommAPIConstants.au3]]&lt;br /&gt;
* [[CommAPI.au3]]&lt;br /&gt;
* [[CommAPIHelper.au3]]&lt;br /&gt;
* [[CommUtilities.au3]]&lt;br /&gt;
* [[CommInterface.au3]]&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
[[CommAPI Examples]] shows you some examples. Mayby you could find more examples in [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/?p=1126366 forum].&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
=== History ===&lt;br /&gt;
* 2008-09-12 Creation of cfx.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/#entry578111 (V1.0)]&lt;br /&gt;
* 2011-02-18 Conversation of cfx.au3 into cfxUDF.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry872154 (V2.0)]&lt;br /&gt;
* 2011-02-28 Update V2.0to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry874547 V2.1]&lt;br /&gt;
* 2011-04-27 Update V2.1 to [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=217993#post217993 V2.2] (german forum)&lt;br /&gt;
* 2013-07-10 Modify V2.1 to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry1094288 V2.1mod]&lt;br /&gt;
* 2013-10-24 Creation of [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ CommAPI.au3]&lt;br /&gt;
&lt;br /&gt;
=== Changelog ===&lt;br /&gt;
; 2014-01-23&lt;br /&gt;
: Small update of method _CommAPI_CreateModeString&lt;br /&gt;
; 2014-02-03&lt;br /&gt;
: Change timeout handling (Attention: not backward compatible)&lt;br /&gt;
: Small update of method _CommAPI_PurgeComm&lt;br /&gt;
; 2014-03-07&lt;br /&gt;
: Rename CommAPIStructures.au3 to CommAPIConstants.au3&lt;br /&gt;
: Replace hex values with Constants&lt;br /&gt;
; 2014-03-27&lt;br /&gt;
: Update of call _WinAPI_CreateFile&lt;br /&gt;
: Updated @error handling&lt;br /&gt;
: New parameter MaxLen for function _CommAPI_ReceiveData&lt;br /&gt;
: New function _CommAPI_ReceiveLine&lt;br /&gt;
: Update existing examples and add new examples&lt;br /&gt;
; 2014-03-31&lt;br /&gt;
: Add constants&lt;br /&gt;
: Fix _CommAPI_WaitCommEvent&lt;br /&gt;
; 2014-04-03&lt;br /&gt;
: Fix reading error Chr(128) to Chr(255)&lt;br /&gt;
: Fix error in _CommAPI_TransmitData&lt;br /&gt;
; 2014-04-04&lt;br /&gt;
: Replace ReceiveData &amp;amp; ReceiveLine with ReceiveBinary &amp;amp; ReceiveString&lt;br /&gt;
&lt;br /&gt;
=== Roadmap ===&lt;br /&gt;
There is no roadmap in the moment. Feel free to implement the last five remaining API calls, enhance the scripts or to fix bugs.&lt;br /&gt;
&lt;br /&gt;
=== Support ===&lt;br /&gt;
There is no official support. Try to get help from community in the official forum. [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ Here you can find the main thread].&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx MSDN Library of communications functions]&lt;br /&gt;
* [http://www.hpcc.ecs.soton.ac.uk/software/Win32API.Txt WIN32API.TXT]&lt;br /&gt;
* cfxUDF.au3 (see section above)&lt;br /&gt;
* [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=198669#post198669 GetCOMPorts] (german forum)&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/19713-problem-with-struct/#entry136466 ParseCommState]&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== Implemented API functions ===&lt;br /&gt;
* BuildCommDCB&lt;br /&gt;
* BuildCommDCBAndTimeouts&lt;br /&gt;
* ClearCommBreak&lt;br /&gt;
* ClearCommError&lt;br /&gt;
* EscapeCommFunction&lt;br /&gt;
* GetCommMask&lt;br /&gt;
* GetCommModemStatus&lt;br /&gt;
* GetCommProperties&lt;br /&gt;
* GetCommState&lt;br /&gt;
* GetCommTimeouts&lt;br /&gt;
* PurgeComm&lt;br /&gt;
* SetCommBreak&lt;br /&gt;
* SetCommMask&lt;br /&gt;
* SetCommState&lt;br /&gt;
* SetCommTimeouts&lt;br /&gt;
* SetupComm&lt;br /&gt;
* TransmitCommChar&lt;br /&gt;
* WaitCommEvent&lt;br /&gt;
&lt;br /&gt;
=== Unimplemented API functions ===&lt;br /&gt;
* CommConfigDialog&lt;br /&gt;
* GetCommConfig&lt;br /&gt;
* GetDefaultCommConfig&lt;br /&gt;
* SetCommConfig&lt;br /&gt;
* SetDefaultCommConfig&lt;br /&gt;
&lt;br /&gt;
=== API helper functions ===&lt;br /&gt;
* ChangeCommStateElement&lt;br /&gt;
* ChangeCommTimeoutsElement&lt;br /&gt;
* GetCommStateElement&lt;br /&gt;
* GetCommTimeoutsElement&lt;br /&gt;
* IsOnCTS&lt;br /&gt;
* IsOnDCD&lt;br /&gt;
* IsOnDSR&lt;br /&gt;
* IsOnRI&lt;br /&gt;
* SetCommStateElement&lt;br /&gt;
* SetCommTimeoutsElement&lt;br /&gt;
* SetOnDTR&lt;br /&gt;
* SetOnRTS&lt;br /&gt;
&lt;br /&gt;
=== Utility functions ===&lt;br /&gt;
* CommStateToString&lt;br /&gt;
* CommTimeoutsToString&lt;br /&gt;
* CreateModeString&lt;br /&gt;
* GetCOMPorts&lt;br /&gt;
&lt;br /&gt;
=== Interface functions ===&lt;br /&gt;
* ClosePort&lt;br /&gt;
* OpenCOMPort&lt;br /&gt;
* OpenPort&lt;br /&gt;
* ReceiveBinary&lt;br /&gt;
* ReceiveString&lt;br /&gt;
* TransmitData&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12353</id>
		<title>CommInterface.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12353"/>
		<updated>2014-04-04T14:15:15Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: replace ReceiveData &amp;amp; ReceiveLine with ReceiveBinary &amp;amp; ReceiveString&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommInterface.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-04-03&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPIHelper.au3&amp;quot;&lt;br /&gt;
#include &amp;quot;CommUtilities.au3&amp;quot;&lt;br /&gt;
#include &amp;lt;WinAPI.au3&amp;gt;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClosePort&lt;br /&gt;
; Description ...: CLoses a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
	Local $fSuccess = _WinAPI_CloseHandle($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, 0, False)&lt;br /&gt;
	If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return $fSuccess&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClosePort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenCOMPort&lt;br /&gt;
; Description ...: Opens a COM Port.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenCOMPort(Const $iPort[, $iBaudRate = Default[, $iParity = Default[, $iByteSize = Default[,&lt;br /&gt;
;                  $iStopBits = Default]]]])&lt;br /&gt;
; Parameters ....: $iPort               - [in] A port number.&lt;br /&gt;
;                  $iBaudRate           - [in] The baud rate at which the communications device operates.&lt;br /&gt;
;                  $iParity             - [in] The parity scheme to be used.&lt;br /&gt;
;                  $iByteSize           - [in] Specifies the number of data bits in a character.&lt;br /&gt;
;                  $iStopBits           - [in] Specifies the number of stop bits that define the end of a character: 1, 1.5, or 2.&lt;br /&gt;
; Return values .: Success - Open handle to a specified communications device&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                            11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort, _CommAPI_ClosePort, _CommAPI_CreateModeString&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenCOMPort(Const $iPort, Const $iBaudRate = Default, Const $iParity = Default, Const $iByteSize = Default, Const $iStopBits = Default)&lt;br /&gt;
	Local $sMode = _CommAPI_CreateModeString($iPort, $iBaudRate, $iParity, $iByteSize, $iStopBits)&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($sMode)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenCOMPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenPort&lt;br /&gt;
; Description ...: Opens a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
; Return values .: Success - Open handle to a specified communications device&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                            11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenCOMPort, _CommAPI_ClosePort, _CommAPI_SetCommState&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365430(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
	Local $sFileName = &amp;quot;\\.\&amp;quot; &amp;amp; StringLeft($sMode, StringInStr($sMode, &amp;quot;:&amp;quot;) - 1)&lt;br /&gt;
	Local $hFile = _WinAPI_CreateFile($sFileName, 3, 6)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If $hFile &amp;lt;= 0 Then Return SetError(-1, @ScriptLineNumber, 0)&lt;br /&gt;
&lt;br /&gt;
	Local $tDCB = DllStructCreate($tagDCB)&lt;br /&gt;
	Local $tCommTimeouts = DllStructCreate($tagCOMMTIMEOUTS)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_BuildCommDCB($sMode, $tDCB)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;ReadTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;WriteTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	If Not _CommAPI_SetCommState($hFile, $tDCB) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	If Not _CommAPI_SetCommTimeouts($hFile, $tCommTimeouts) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveBinary&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveBinary(Const $hFile[, $iTimeout = 1[, $iMaxLength = 0[, $vSeparator = &amp;quot;&amp;quot;]]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLength          - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $vSeparator          - [in] A value which is used as a separator.&lt;br /&gt;
;                                              Is activated only by non-empty values.&lt;br /&gt;
; Return values .: Success - Received binary data (including separator)&lt;br /&gt;
;                  Failure - Received binary data&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveString, _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveBinary(Const $hFile, Const $iTimeout = 1, Const $iMaxLength = 0, Const $vSeparator = &amp;quot;&amp;quot;)&lt;br /&gt;
	Local $bSeparator = Binary($vSeparator)&lt;br /&gt;
	Local $iSepLength = BinaryLen($bSeparator)&lt;br /&gt;
	Local $fSuccess = False&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;BYTE&amp;quot;)&lt;br /&gt;
	Local $pBuffer = DllStructGetPtr($tBuffer)&lt;br /&gt;
	Local $iRead = 0&lt;br /&gt;
	Local $vResult = Binary(&amp;quot;&amp;quot;)&lt;br /&gt;
	Local $iResLength = 0&lt;br /&gt;
	Local $hTimer = TimerInit()&lt;br /&gt;
	While True&lt;br /&gt;
		$fSuccess = _WinAPI_ReadFile($hFile, $pBuffer, 1, $iRead)&lt;br /&gt;
		If @error Then Return SetError(@error, @ScriptLineNumber, $vResult)&lt;br /&gt;
		If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, $vResult)&lt;br /&gt;
		If $iRead Then&lt;br /&gt;
			$vResult &amp;amp;= BinaryMid(Binary(DllStructGetData($tBuffer, 1)), 1, 1)&lt;br /&gt;
			$iResLength = BinaryLen($vResult)&lt;br /&gt;
			If $iResLength = $iMaxLength And $iMaxLength &amp;gt; 0 Then Return $vResult&lt;br /&gt;
			If $bSeparator = BinaryMid($vResult, 1 + $iResLength - $iSepLength) Then Return $vResult&lt;br /&gt;
		Else&lt;br /&gt;
			If $vResult And Not $iSepLength Then Return $vResult&lt;br /&gt;
			If $iTimeout &amp;gt; 0 And $iTimeout &amp;lt; TimerDiff($hTimer) Then Return SetError(-2, @ScriptLineNumber, $vResult)&lt;br /&gt;
		EndIf&lt;br /&gt;
	WEnd&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ReceiveBinary&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveString&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveString(Const $hFile[, $iTimeout = 1[, $iMaxLength = 0[, $sSeparator = &amp;quot;&amp;quot;]]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLength          - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $sSeparator          - [in] A value which is used as a separator.&lt;br /&gt;
;                                              Is activated only by non-empty values.&lt;br /&gt;
;                  $iFlag               - [in] Flag for function BinaryToString().&lt;br /&gt;
; Return values .: Success - Received string (including separator)&lt;br /&gt;
;                  Failure - Received string&lt;br /&gt;
;                            Received binary data in case of @error = -3&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
;                           -3 error in BinaryToString&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveBinary, _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveString(Const $hFile, Const $iTimeout = 1, Const $iMaxLength = 0, Const $sSeparator = &amp;quot;&amp;quot;, Const $iFlag = 1)&lt;br /&gt;
	Local $bResult = _CommAPI_ReceiveBinary($hFile, $iTimeout, $iMaxLength, StringToBinary($sSeparator, $iFlag))&lt;br /&gt;
	Local $iError = @error&lt;br /&gt;
	Local $iExtended = @extended&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	If $bResult Then&lt;br /&gt;
		$sResult = BinaryToString($bResult, $iFlag)&lt;br /&gt;
		If @error Then SetError(-3, @ScriptLineNumber, $bResult)&lt;br /&gt;
	EndIf&lt;br /&gt;
	Return SetError($iError, $iExtended, $sResult)&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ReceiveString&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitData&lt;br /&gt;
; Description ...: Transmits data (TxD/TX/TD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $vData               - [in] A string value to transmit.&lt;br /&gt;
; Return values .: Success - Number of written bytes&lt;br /&gt;
;                  Failure - Number of written bytes&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveBinary, _CommAPI_ReceiveString&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitData(Const $hFile, Const $vData)&lt;br /&gt;
	Local $bData = Binary($vData)&lt;br /&gt;
	Local $iLength = BinaryLen($vData)&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;BYTE[&amp;quot; &amp;amp; $iLength &amp;amp; &amp;quot;]&amp;quot;)&lt;br /&gt;
	DllStructSetData($tBuffer, 1, $bData)&lt;br /&gt;
	Local $fSuccess = _WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), $iLength, $iWritten)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If Not $fSuccess Then Return SetError(-1, @ScriptLineNumber, $iWritten)&lt;br /&gt;
	Return $iWritten&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_TransmitData&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI_Examples&amp;diff=12352</id>
		<title>CommAPI Examples</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI_Examples&amp;diff=12352"/>
		<updated>2014-04-04T14:10:18Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Samples]]&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This site shows you some examples for [[CommAPI]].&lt;br /&gt;
You will also need the following snippet for all examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;CommInterface.au3&amp;quot;&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
Main()&lt;br /&gt;
&lt;br /&gt;
Func Main()&lt;br /&gt;
	Local $sResult = Example()&lt;br /&gt;
	Switch @error&lt;br /&gt;
		Case 0&lt;br /&gt;
			MsgBox(64, &amp;quot;Result&amp;quot;, $sResult)&lt;br /&gt;
		Case -1&lt;br /&gt;
			MsgBox(32, &amp;quot;Error&amp;quot;, _WinAPI_GetLastErrorMessage())&lt;br /&gt;
		Case -2&lt;br /&gt;
			MsgBox(32, &amp;quot;Timeout&amp;quot;, $sResult)&lt;br /&gt;
		Case Else&lt;br /&gt;
			MsgBox(32, &amp;quot;Error&amp;quot;, &amp;quot;Error &amp;quot; &amp;amp; @error &amp;amp; &amp;quot; in line &amp;quot; &amp;amp; @extended)&lt;br /&gt;
	EndSwitch&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First example ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local Const $iPort = 1&lt;br /&gt;
	Local Const $iBaud = 9600&lt;br /&gt;
	Local Const $iParity = 0&lt;br /&gt;
	Local Const $iByteSize = 8&lt;br /&gt;
	Local Const $iStopBits = 1&lt;br /&gt;
	Local Const $sCommand = &amp;quot;Command&amp;quot; &amp;amp; @CRLF&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenCOMPort($iPort, $iBaud, $iParity, $iByteSize, $iStopBits)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitData($hFile, $sCommand)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveString($hFile, 5000)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INI file==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local Const $sFileINI = @ScriptDir &amp;amp; &amp;quot;\Example.ini&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	Local $sMode = _CommAPI_CreateModeString( _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;SerialPort&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;BaudRate&amp;quot;, 9600), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;Parity&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;ByteSize&amp;quot;, 8), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;StopBits&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;XON&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;DSR&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;CTS&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;DTR&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;RTS&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;IDSR&amp;quot;, 0))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($sMode)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitData($hFile, IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;Command&amp;quot;, &amp;quot;Command&amp;quot; &amp;amp; @CRLF))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveString($hFile, IniRead($sFileINI, &amp;quot;Timeout&amp;quot;, &amp;quot;IDSR&amp;quot;, 5000))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command Line ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	If $CmdLine[0] &amp;lt;&amp;gt; 2 Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Syntax&amp;quot;, @ScriptName &amp;amp; &#039; &amp;quot;ModeString&amp;quot; &amp;quot;Command&amp;quot;&#039;)&lt;br /&gt;
		Exit&lt;br /&gt;
	EndIf&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($CmdLine[1])&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitData($hFile, $CmdLine[2])&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveString($hFile, 5000)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;winbatch&amp;quot;&amp;gt;&lt;br /&gt;
@echo off&lt;br /&gt;
cls&lt;br /&gt;
chcp 1252&amp;gt;nul&lt;br /&gt;
cd /d &amp;quot;%~dp0&amp;quot;&lt;br /&gt;
start Example.exe &amp;quot;COM1: BAUD=9600 PARITY=N DATA=8 STOP=1 XON=OFF ODSR=OFF OCTS=ON DTR=ON RTS=ON IDSR=OFF&amp;quot; &amp;quot;Command&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Separator ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local $hFile = _CommAPI_OpenCOMPort(1, 9600, 0, 8, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	While True&lt;br /&gt;
		$sResult = _CommAPI_ReceiveString($hFile, 5000, 0, &amp;quot;&amp;lt;CR&amp;gt;&amp;quot;)&lt;br /&gt;
		If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
		MsgBox(64, &amp;quot;Line&amp;quot;, $sResult)&lt;br /&gt;
	WEnd&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Slow Devices ==&lt;br /&gt;
For some slow devices the default timeout is too small of one millisecond.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local $hFile = _CommAPI_OpenCOMPort(1, 9600, 0, 8, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ChangeCommTimeoutsElement($hFile, &amp;quot;ReadTotalTimeoutMultiplier&amp;quot;, 100)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveString($hFile, 5000)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12351</id>
		<title>CommAPI</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12351"/>
		<updated>2014-04-03T11:13:36Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: /* Changelog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CommAPI translates the communications functions of Windows API to AutoIt functions.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
=== Features ===&lt;br /&gt;
* No need to install DLL&#039;s&lt;br /&gt;
* Using Windows API calls (kernel32.dll)&lt;br /&gt;
* Possibility of serial communication (serial port, COM port, RS-232)&lt;br /&gt;
* Possibility of parallel communication (parallel port, LPT port)&lt;br /&gt;
* No use of global variables&lt;br /&gt;
* Uniform namespace _CommAPI_XXX&lt;br /&gt;
* Modular organization into files&lt;br /&gt;
* A lot of additional utility and helper functions&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
* [[CommAPIConstants.au3]]&lt;br /&gt;
* [[CommAPI.au3]]&lt;br /&gt;
* [[CommAPIHelper.au3]]&lt;br /&gt;
* [[CommUtilities.au3]]&lt;br /&gt;
* [[CommInterface.au3]]&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
[[CommAPI Examples]] shows you some examples. Mayby you could find more examples in [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/?p=1126366 forum].&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
=== History ===&lt;br /&gt;
* 2008-09-12 Creation of cfx.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/#entry578111 (V1.0)]&lt;br /&gt;
* 2011-02-18 Conversation of cfx.au3 into cfxUDF.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry872154 (V2.0)]&lt;br /&gt;
* 2011-02-28 Update V2.0to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry874547 V2.1]&lt;br /&gt;
* 2011-04-27 Update V2.1 to [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=217993#post217993 V2.2] (german forum)&lt;br /&gt;
* 2013-07-10 Modify V2.1 to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry1094288 V2.1mod]&lt;br /&gt;
* 2013-10-24 Creation of [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ CommAPI.au3]&lt;br /&gt;
&lt;br /&gt;
=== Changelog ===&lt;br /&gt;
; 2014-01-23&lt;br /&gt;
: Small update of method _CommAPI_CreateModeString&lt;br /&gt;
; 2014-02-03&lt;br /&gt;
: Change timeout handling (Attention: not backward compatible)&lt;br /&gt;
: Small update of method _CommAPI_PurgeComm&lt;br /&gt;
; 2014-03-07&lt;br /&gt;
: Rename CommAPIStructures.au3 to CommAPIConstants.au3&lt;br /&gt;
: Replace hex values with Constants&lt;br /&gt;
; 2014-03-27&lt;br /&gt;
: Update of call _WinAPI_CreateFile&lt;br /&gt;
: Updated @error handling&lt;br /&gt;
: New parameter MaxLen for function _CommAPI_ReceiveData&lt;br /&gt;
: New function _CommAPI_ReceiveLine&lt;br /&gt;
: Update existing examples and add new examples&lt;br /&gt;
; 2014-03-31&lt;br /&gt;
: Add constants&lt;br /&gt;
: Fix _CommAPI_WaitCommEvent&lt;br /&gt;
; 2014-04-03&lt;br /&gt;
: Fix reading error Chr(128) to Chr(255)&lt;br /&gt;
: Fix error in _CommAPI_TransmitData&lt;br /&gt;
&lt;br /&gt;
=== Roadmap ===&lt;br /&gt;
There is no roadmap in the moment. Feel free to implement the last five remaining API calls, enhance the scripts or to fix bugs.&lt;br /&gt;
&lt;br /&gt;
=== Support ===&lt;br /&gt;
There is no official support. Try to get help from community in the official forum. [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ Here you can find the main thread].&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx MSDN Library of communications functions]&lt;br /&gt;
* [http://www.hpcc.ecs.soton.ac.uk/software/Win32API.Txt WIN32API.TXT]&lt;br /&gt;
* cfxUDF.au3 (see section above)&lt;br /&gt;
* [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=198669#post198669 GetCOMPorts] (german forum)&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/19713-problem-with-struct/#entry136466 ParseCommState]&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== Implemented API functions ===&lt;br /&gt;
* BuildCommDCB&lt;br /&gt;
* BuildCommDCBAndTimeouts&lt;br /&gt;
* ClearCommBreak&lt;br /&gt;
* ClearCommError&lt;br /&gt;
* EscapeCommFunction&lt;br /&gt;
* GetCommMask&lt;br /&gt;
* GetCommModemStatus&lt;br /&gt;
* GetCommProperties&lt;br /&gt;
* GetCommState&lt;br /&gt;
* GetCommTimeouts&lt;br /&gt;
* PurgeComm&lt;br /&gt;
* SetCommBreak&lt;br /&gt;
* SetCommMask&lt;br /&gt;
* SetCommState&lt;br /&gt;
* SetCommTimeouts&lt;br /&gt;
* SetupComm&lt;br /&gt;
* TransmitCommChar&lt;br /&gt;
* WaitCommEvent&lt;br /&gt;
&lt;br /&gt;
=== Unimplemented API functions ===&lt;br /&gt;
* CommConfigDialog&lt;br /&gt;
* GetCommConfig&lt;br /&gt;
* GetDefaultCommConfig&lt;br /&gt;
* SetCommConfig&lt;br /&gt;
* SetDefaultCommConfig&lt;br /&gt;
&lt;br /&gt;
=== API helper functions ===&lt;br /&gt;
* ChangeCommStateElement&lt;br /&gt;
* ChangeCommTimeoutsElement&lt;br /&gt;
* GetCommStateElement&lt;br /&gt;
* GetCommTimeoutsElement&lt;br /&gt;
* IsOnCTS&lt;br /&gt;
* IsOnDCD&lt;br /&gt;
* IsOnDSR&lt;br /&gt;
* IsOnRI&lt;br /&gt;
* SetCommStateElement&lt;br /&gt;
* SetCommTimeoutsElement&lt;br /&gt;
* SetOnDTR&lt;br /&gt;
* SetOnRTS&lt;br /&gt;
&lt;br /&gt;
=== Utility functions ===&lt;br /&gt;
* CommStateToString&lt;br /&gt;
* CommTimeoutsToString&lt;br /&gt;
* CreateModeString&lt;br /&gt;
* GetCOMPorts&lt;br /&gt;
&lt;br /&gt;
=== Interface functions ===&lt;br /&gt;
* ClosePort&lt;br /&gt;
* OpenCOMPort&lt;br /&gt;
* OpenPort&lt;br /&gt;
* ReceiveData&lt;br /&gt;
* TransmitData&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12350</id>
		<title>CommInterface.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12350"/>
		<updated>2014-04-03T11:12:04Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: fix error in _CommAPI_TransmitData&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommInterface.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-04-03&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPIHelper.au3&amp;quot;&lt;br /&gt;
#include &amp;quot;CommUtilities.au3&amp;quot;&lt;br /&gt;
#include &amp;lt;WinAPI.au3&amp;gt;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClosePort&lt;br /&gt;
; Description ...: CLoses a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
	Local $fResult = _WinAPI_CloseHandle($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, 0, False)&lt;br /&gt;
	If Not $fResult Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return $fResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClosePort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenCOMPort&lt;br /&gt;
; Description ...: Opens a COM Port.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenCOMPort(Const $iPort[, $iBaudRate = Default[, $iParity = Default[, $iByteSize = Default[,&lt;br /&gt;
;                  $iStopBits = Default]]]])&lt;br /&gt;
; Parameters ....: $iPort               - [in] A port number.&lt;br /&gt;
;                  $iBaudRate           - [in] The baud rate at which the communications device operates.&lt;br /&gt;
;                  $iParity             - [in] The parity scheme to be used.&lt;br /&gt;
;                  $iByteSize           - [in] Specifies the number of data bits in a character.&lt;br /&gt;
;                  $iStopBits           - [in] Specifies the number of stop bits that define the end of a character: 1, 1.5, or 2.&lt;br /&gt;
; Return values .: Success - Open handle to a specified communications device&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                            11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort, _CommAPI_ClosePort, _CommAPI_CreateModeString&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenCOMPort(Const $iPort, Const $iBaudRate = Default, Const $iParity = Default, Const $iByteSize = Default, Const $iStopBits = Default)&lt;br /&gt;
	Local $sMode = _CommAPI_CreateModeString($iPort, $iBaudRate, $iParity, $iByteSize, $iStopBits)&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($sMode)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenCOMPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenPort&lt;br /&gt;
; Description ...: Opens a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
; Return values .: Success - Open handle to a specified communications device&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                            11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenCOMPort, _CommAPI_ClosePort, _CommAPI_SetCommState&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365430(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
	Local $sFileName = &amp;quot;\\.\&amp;quot; &amp;amp; StringLeft($sMode, StringInStr($sMode, &amp;quot;:&amp;quot;) - 1)&lt;br /&gt;
	Local $hFile = _WinAPI_CreateFile($sFileName, 3, 6)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If $hFile &amp;lt;= 0 Then Return SetError(-1, @ScriptLineNumber, 0)&lt;br /&gt;
&lt;br /&gt;
	Local $tDCB = DllStructCreate($tagDCB)&lt;br /&gt;
	Local $tCommTimeouts = DllStructCreate($tagCOMMTIMEOUTS)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_BuildCommDCB($sMode, $tDCB)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;ReadTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;WriteTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	If Not _CommAPI_SetCommState($hFile, $tDCB) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	If Not _CommAPI_SetCommTimeouts($hFile, $tCommTimeouts) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveData&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveData(Const $hFile[, $iTimeout = 1[, $iMaxLen = 0]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLen             - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
; Return values .: Success - Received string&lt;br /&gt;
;                  Failure - Received string&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......: If the result contains Chr(0), you should convert the result with function Binary().&lt;br /&gt;
; Related .......: _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveData(Const $hFile, Const $iTimeout = 1, Const $iMaxLen = 0)&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;wchar&amp;quot;)&lt;br /&gt;
	Local $hTimer = TimerInit()&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	While 1&lt;br /&gt;
		Local $fResult = _WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), 1, $iWritten)&lt;br /&gt;
		If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
		If Not $fResult Then Return SetError(-1, @ScriptLineNumber, $sResult)&lt;br /&gt;
		If $iWritten Then&lt;br /&gt;
			$sResult &amp;amp;= DllStructGetData($tBuffer, 1)&lt;br /&gt;
			If $iMaxLen &amp;gt; 0 And $iMaxLen = StringLen($sResult) Then Return $sResult&lt;br /&gt;
		Else&lt;br /&gt;
			If $sResult Then Return $sResult&lt;br /&gt;
			If $iTimeout &amp;gt;= 0 And $iTimeout &amp;lt; TimerDiff($hTimer) Then Return SetError(-2, @ScriptLineNumber, $sResult)&lt;br /&gt;
		EndIf&lt;br /&gt;
	WEnd&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ReceiveData&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveLine&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveLine(Const $hFile[, $sSeparator = @CRLF[, $iTimeout = 1[, $iMaxLen = 0]]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sSeparator          - [in] A string value which is used as a separator.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLen             - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
; Return values .: Success - Received string including separator&lt;br /&gt;
;                  Failure - Received string&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......: If the result contains Chr(0), you should convert the result with function Binary().&lt;br /&gt;
;                  To remove separator from result, you can use function StringTrimRight($sResult, StringLen($sSeparator)).&lt;br /&gt;
; Related .......: _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveLine(Const $hFile, Const $sSeparator = @CRLF, Const $iTimeout = 1, Const $iMaxLen = 0)&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;wchar&amp;quot;)&lt;br /&gt;
	Local $iLength = StringLen($sSeparator)&lt;br /&gt;
	Local $hTimer = TimerInit()&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	While 1&lt;br /&gt;
		Local $fResult = _WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), 1, $iWritten)&lt;br /&gt;
		If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
		If Not $fResult Then Return SetError(-1, @ScriptLineNumber, $sResult)&lt;br /&gt;
		If $iWritten Then&lt;br /&gt;
			$sResult &amp;amp;= DllStructGetData($tBuffer, 1)&lt;br /&gt;
			If $iMaxLen &amp;gt; 0 And $iMaxLen = StringLen($sResult) Then Return $sResult&lt;br /&gt;
			If StringRight($sResult, $iLength) == $sSeparator Then Return $sResult&lt;br /&gt;
		Else&lt;br /&gt;
			If $iTimeout &amp;gt;= 0 And $iTimeout &amp;lt; TimerDiff($hTimer) Then Return SetError(-2, @ScriptLineNumber, $sResult)&lt;br /&gt;
		EndIf&lt;br /&gt;
	WEnd&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitData&lt;br /&gt;
; Description ...: Transmits data (TxD/TX/TD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $vData               - [in] A string value to transmit.&lt;br /&gt;
; Return values .: Success - Number of written bytes&lt;br /&gt;
;                  Failure - Number of written bytes&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitData(Const $hFile, Const $vData)&lt;br /&gt;
	Local $bData = Binary($vData)&lt;br /&gt;
	Local $iLength = BinaryLen($vData)&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;byte[&amp;quot; &amp;amp; $iLength &amp;amp; &amp;quot;]&amp;quot;)&lt;br /&gt;
	DllStructSetData($tBuffer, 1, $bData)&lt;br /&gt;
	Local $fResult = _WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), $iLength, $iWritten)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If Not $fResult Then Return SetError(-1, @ScriptLineNumber, $iWritten)&lt;br /&gt;
	Return $iWritten&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_TransmitData&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12349</id>
		<title>CommAPI</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12349"/>
		<updated>2014-04-03T08:40:22Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: /* Changelog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CommAPI translates the communications functions of Windows API to AutoIt functions.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
=== Features ===&lt;br /&gt;
* No need to install DLL&#039;s&lt;br /&gt;
* Using Windows API calls (kernel32.dll)&lt;br /&gt;
* Possibility of serial communication (serial port, COM port, RS-232)&lt;br /&gt;
* Possibility of parallel communication (parallel port, LPT port)&lt;br /&gt;
* No use of global variables&lt;br /&gt;
* Uniform namespace _CommAPI_XXX&lt;br /&gt;
* Modular organization into files&lt;br /&gt;
* A lot of additional utility and helper functions&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
* [[CommAPIConstants.au3]]&lt;br /&gt;
* [[CommAPI.au3]]&lt;br /&gt;
* [[CommAPIHelper.au3]]&lt;br /&gt;
* [[CommUtilities.au3]]&lt;br /&gt;
* [[CommInterface.au3]]&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
[[CommAPI Examples]] shows you some examples. Mayby you could find more examples in [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/?p=1126366 forum].&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
=== History ===&lt;br /&gt;
* 2008-09-12 Creation of cfx.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/#entry578111 (V1.0)]&lt;br /&gt;
* 2011-02-18 Conversation of cfx.au3 into cfxUDF.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry872154 (V2.0)]&lt;br /&gt;
* 2011-02-28 Update V2.0to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry874547 V2.1]&lt;br /&gt;
* 2011-04-27 Update V2.1 to [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=217993#post217993 V2.2] (german forum)&lt;br /&gt;
* 2013-07-10 Modify V2.1 to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry1094288 V2.1mod]&lt;br /&gt;
* 2013-10-24 Creation of [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ CommAPI.au3]&lt;br /&gt;
&lt;br /&gt;
=== Changelog ===&lt;br /&gt;
; 2014-01-23&lt;br /&gt;
: Small update of method _CommAPI_CreateModeString&lt;br /&gt;
; 2014-02-03&lt;br /&gt;
: Change timeout handling (Attention: not backward compatible)&lt;br /&gt;
: Small update of method _CommAPI_PurgeComm&lt;br /&gt;
; 2014-03-07&lt;br /&gt;
: Rename CommAPIStructures.au3 to CommAPIConstants.au3&lt;br /&gt;
: Replace hex values with Constants&lt;br /&gt;
; 2014-03-27&lt;br /&gt;
: Update of call _WinAPI_CreateFile&lt;br /&gt;
: Updated @error handling&lt;br /&gt;
: New parameter MaxLen for function _CommAPI_ReceiveData&lt;br /&gt;
: New function _CommAPI_ReceiveLine&lt;br /&gt;
: Update existing examples and add new examples&lt;br /&gt;
; 2014-03-31&lt;br /&gt;
: Add constants&lt;br /&gt;
: Fix _CommAPI_WaitCommEvent&lt;br /&gt;
; 2014-04-03&lt;br /&gt;
: Fix reading error Chr(128) to Chr(255)&lt;br /&gt;
&lt;br /&gt;
=== Roadmap ===&lt;br /&gt;
There is no roadmap in the moment. Feel free to implement the last five remaining API calls, enhance the scripts or to fix bugs.&lt;br /&gt;
&lt;br /&gt;
=== Support ===&lt;br /&gt;
There is no official support. Try to get help from community in the official forum. [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ Here you can find the main thread].&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx MSDN Library of communications functions]&lt;br /&gt;
* [http://www.hpcc.ecs.soton.ac.uk/software/Win32API.Txt WIN32API.TXT]&lt;br /&gt;
* cfxUDF.au3 (see section above)&lt;br /&gt;
* [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=198669#post198669 GetCOMPorts] (german forum)&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/19713-problem-with-struct/#entry136466 ParseCommState]&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== Implemented API functions ===&lt;br /&gt;
* BuildCommDCB&lt;br /&gt;
* BuildCommDCBAndTimeouts&lt;br /&gt;
* ClearCommBreak&lt;br /&gt;
* ClearCommError&lt;br /&gt;
* EscapeCommFunction&lt;br /&gt;
* GetCommMask&lt;br /&gt;
* GetCommModemStatus&lt;br /&gt;
* GetCommProperties&lt;br /&gt;
* GetCommState&lt;br /&gt;
* GetCommTimeouts&lt;br /&gt;
* PurgeComm&lt;br /&gt;
* SetCommBreak&lt;br /&gt;
* SetCommMask&lt;br /&gt;
* SetCommState&lt;br /&gt;
* SetCommTimeouts&lt;br /&gt;
* SetupComm&lt;br /&gt;
* TransmitCommChar&lt;br /&gt;
* WaitCommEvent&lt;br /&gt;
&lt;br /&gt;
=== Unimplemented API functions ===&lt;br /&gt;
* CommConfigDialog&lt;br /&gt;
* GetCommConfig&lt;br /&gt;
* GetDefaultCommConfig&lt;br /&gt;
* SetCommConfig&lt;br /&gt;
* SetDefaultCommConfig&lt;br /&gt;
&lt;br /&gt;
=== API helper functions ===&lt;br /&gt;
* ChangeCommStateElement&lt;br /&gt;
* ChangeCommTimeoutsElement&lt;br /&gt;
* GetCommStateElement&lt;br /&gt;
* GetCommTimeoutsElement&lt;br /&gt;
* IsOnCTS&lt;br /&gt;
* IsOnDCD&lt;br /&gt;
* IsOnDSR&lt;br /&gt;
* IsOnRI&lt;br /&gt;
* SetCommStateElement&lt;br /&gt;
* SetCommTimeoutsElement&lt;br /&gt;
* SetOnDTR&lt;br /&gt;
* SetOnRTS&lt;br /&gt;
&lt;br /&gt;
=== Utility functions ===&lt;br /&gt;
* CommStateToString&lt;br /&gt;
* CommTimeoutsToString&lt;br /&gt;
* CreateModeString&lt;br /&gt;
* GetCOMPorts&lt;br /&gt;
&lt;br /&gt;
=== Interface functions ===&lt;br /&gt;
* ClosePort&lt;br /&gt;
* OpenCOMPort&lt;br /&gt;
* OpenPort&lt;br /&gt;
* ReceiveData&lt;br /&gt;
* TransmitData&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12348</id>
		<title>CommInterface.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12348"/>
		<updated>2014-04-03T08:39:47Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: fix reading error Chr(128) to Chr(255)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommInterface.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-04-03&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPIHelper.au3&amp;quot;&lt;br /&gt;
#include &amp;quot;CommUtilities.au3&amp;quot;&lt;br /&gt;
#include &amp;lt;WinAPI.au3&amp;gt;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClosePort&lt;br /&gt;
; Description ...: CLoses a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
	Local $fResult = _WinAPI_CloseHandle($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, 0, False)&lt;br /&gt;
	Return $fResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClosePort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenCOMPort&lt;br /&gt;
; Description ...: Opens a COM Port.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenCOMPort(Const $iPort[, $iBaudRate = Default[, $iParity = Default[, $iByteSize = Default[,&lt;br /&gt;
;                  $iStopBits = Default]]]])&lt;br /&gt;
; Parameters ....: $iPort               - [in] A port number.&lt;br /&gt;
;                  $iBaudRate           - [in] The baud rate at which the communications device operates.&lt;br /&gt;
;                  $iParity             - [in] The parity scheme to be used.&lt;br /&gt;
;                  $iByteSize           - [in] Specifies the number of data bits in a character.&lt;br /&gt;
;                  $iStopBits           - [in] Specifies the number of stop bits that define the end of a character: 1, 1.5, or 2.&lt;br /&gt;
; Return values .: Success - The open handle to a specified communications device.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort, _CommAPI_ClosePort, _CommAPI_CreateModeString&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenCOMPort(Const $iPort, Const $iBaudRate = Default, Const $iParity = Default, Const $iByteSize = Default, Const $iStopBits = Default)&lt;br /&gt;
	Local $sMode = _CommAPI_CreateModeString($iPort, $iBaudRate, $iParity, $iByteSize, $iStopBits)&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($sMode)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenCOMPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenPort&lt;br /&gt;
; Description ...: Opens a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
; Return values .: Success - The open handle to a specified communications device.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                            11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenCOMPort, _CommAPI_ClosePort, _CommAPI_SetCommState&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365430(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
	Local $sFileName = &amp;quot;\\.\&amp;quot; &amp;amp; StringLeft($sMode, StringInStr($sMode, &amp;quot;:&amp;quot;) - 1)&lt;br /&gt;
	Local $hFile = _WinAPI_CreateFile($sFileName, 3, 6)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If $hFile &amp;lt;= 0 Then Return SetError(-1, @ScriptLineNumber, 0)&lt;br /&gt;
&lt;br /&gt;
	Local $tDCB = DllStructCreate($tagDCB)&lt;br /&gt;
	Local $tCommTimeouts = DllStructCreate($tagCOMMTIMEOUTS)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_BuildCommDCB($sMode, $tDCB)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;ReadTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;WriteTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	If Not _CommAPI_SetCommState($hFile, $tDCB) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	If Not _CommAPI_SetCommTimeouts($hFile, $tCommTimeouts) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveData&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveData(Const $hFile[, $iTimeout = 1[, $iMaxLen = 0]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLen             - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
; Return values .: Success - Received string&lt;br /&gt;
;                  Failure - Received or empty string&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......: If the result contains Chr(0), you should convert the result with function Binary().&lt;br /&gt;
; Related .......: _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveData(Const $hFile, Const $iTimeout = 1, Const $iMaxLen = 0)&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;char[2]&amp;quot;)&lt;br /&gt;
	Local $hTimer = TimerInit()&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	While 1&lt;br /&gt;
		_WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), 1, $iWritten)&lt;br /&gt;
		If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
		If $iWritten Then&lt;br /&gt;
			$sResult &amp;amp;= DllStructGetData($tBuffer, 1)&lt;br /&gt;
			If $iMaxLen &amp;gt; 0 And $iMaxLen = StringLen($sResult) Then Return $sResult&lt;br /&gt;
		Else&lt;br /&gt;
			If $sResult Then Return $sResult&lt;br /&gt;
			If $iTimeout &amp;gt;= 0 And $iTimeout &amp;lt; TimerDiff($hTimer) Then Return SetError(-2, @ScriptLineNumber, $sResult)&lt;br /&gt;
		EndIf&lt;br /&gt;
	WEnd&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ReceiveData&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveLine&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveLine(Const $hFile[, $sSeparator = @CRLF[, $iTimeout = 1[, $iMaxLen = 0]]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sSeparator          - [in] A string value which is used as a separator.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLen             - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
; Return values .: Success - Received string including separator&lt;br /&gt;
;                  Failure - Received or empty string&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......: If the result contains Chr(0), you should convert the result with function Binary().&lt;br /&gt;
;                  To remove separator from result, you can use function StringTrimRight($sResult, StringLen($sSeparator)).&lt;br /&gt;
; Related .......: _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveLine(Const $hFile, Const $sSeparator = @CRLF, Const $iTimeout = 1, Const $iMaxLen = 0)&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;char[2]&amp;quot;)&lt;br /&gt;
	Local $iLen = StringLen($sSeparator)&lt;br /&gt;
	Local $hTimer = TimerInit()&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	While 1&lt;br /&gt;
		_WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), 1, $iWritten)&lt;br /&gt;
		If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
		If $iWritten Then&lt;br /&gt;
			$sResult &amp;amp;= DllStructGetData($tBuffer, 1)&lt;br /&gt;
			If $iMaxLen &amp;gt; 0 And $iMaxLen = StringLen($sResult) Then Return $sResult&lt;br /&gt;
			If StringRight($sResult, $iLen) == $sSeparator Then Return $sResult&lt;br /&gt;
		Else&lt;br /&gt;
			If $iTimeout &amp;gt;= 0 And $iTimeout &amp;lt; TimerDiff($hTimer) Then Return SetError(-2, @ScriptLineNumber, $sResult)&lt;br /&gt;
		EndIf&lt;br /&gt;
	WEnd&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitData&lt;br /&gt;
; Description ...: Transmits data (TxD/TX/TD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sData               - [in] A string value to transmit.&lt;br /&gt;
; Return values .: Success - The number of bytes written.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;byte[&amp;quot; &amp;amp; StringLen($sData) &amp;amp; &amp;quot;]&amp;quot;)&lt;br /&gt;
	DllStructSetData($tBuffer, 1, $sData)&lt;br /&gt;
	_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), StringLen($sData), $iWritten)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $iWritten&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_TransmitData&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI.au3&amp;diff=12345</id>
		<title>CommAPI.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI.au3&amp;diff=12345"/>
		<updated>2014-03-31T09:23:46Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: small bugfix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommAPI.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-03-31&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPIConstants.au3&amp;quot;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_BuildCommDCB&lt;br /&gt;
; Description ...: Fills a specified DCB structure with values specified in a device-control string.&lt;br /&gt;
; Syntax ........: _CommAPI_BuildCommDCB(Const $sMode, Byref $tDBC)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
;                  $tDBC                - [out] A DCB structure.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_BuildCommDCBAndTimeouts, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363143(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_BuildCommDCB(Const $sMode, ByRef $tDBC)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;BuildCommDCB&amp;quot;, &amp;quot;str&amp;quot;, $sMode, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDBC))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_BuildCommDCB&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_BuildCommDCBAndTimeouts&lt;br /&gt;
; Description ...: Translates a device-definition string into appropriate device-control block codes and places them into a device control block.&lt;br /&gt;
;                  The function can also set up time-out values for a device.&lt;br /&gt;
; Syntax ........: _CommAPI_BuildCommDCBAndTimeouts(Const $sMode, Byref $tDBC, Byref $tCommTimeouts)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
;                  $tDBC                - [out] A DCB structure.&lt;br /&gt;
;                  $tCommTimeouts       - [out] A COMMTIMEOUTS structure.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_BuildCommDCB, $tagDCB, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363145(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_BuildCommDCBAndTimeouts(Const $sMode, ByRef $tDBC, ByRef $tCommTimeouts)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;BuildCommDCBAndTimeouts&amp;quot;, &amp;quot;str&amp;quot;, $sMode, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDBC), &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_BuildCommDCBAndTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClearCommBreak&lt;br /&gt;
; Description ...: Restores character transmission for a specified communications device and places the transmission line in a nonbreak state.&lt;br /&gt;
; Syntax ........: _CommAPI_ClearCommBreak(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ClearCommError&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363179(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClearCommBreak(Const $hFile)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;ClearCommBreak&amp;quot;, &amp;quot;handle&amp;quot;, $hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClearCommBreak&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClearCommError&lt;br /&gt;
; Description ...: Retrieves information about a communications error and reports the current status of a communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ClearCommError(Const $hFile[, $tComStat = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tComStat            - [out] A COMSTAT structure in which the device&#039;s status information is returned.&lt;br /&gt;
; Return values .: Success - A mask indicating the type of error.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ClearCommBreak, $tagCOMSTAT&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363180(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClearCommError(Const $hFile, $tComStat = 0)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;ClearCommError&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tComStat))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClearCommError&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_EscapeCommFunction&lt;br /&gt;
; Description ...: Directs the specified communications device to perform an extended function.&lt;br /&gt;
; Syntax ........: _CommAPI_EscapeCommFunction(Const $hFile, Const $iFunction)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iFunction           - [in] The extended function to be performed.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetOnDTR, _CommAPI_SetOnRTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363254(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_EscapeCommFunction(Const $hFile, Const $iFunction)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;EscapeCommFunction&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iFunction)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_EscapeCommFunction&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommMask&lt;br /&gt;
; Description ...: Retrieves the value of the event mask for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommMask(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - A mask of events that are currently enabled.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363257(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommMask(Const $hFile)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommMask&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommMask&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Description ...: Retrieves the modem control-register values.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommModemStatus(Const $hFile, Byref $pModemStatus)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - The current state of the modem control-register values.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_IsOnCTS, _CommAPI_IsOnDSR, _CommAPI_IsOnRI, _CommAPI_IsOnDCD, _CommAPI_WaitCommEvent&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommModemStatus(Const $hFile)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommModemStatus&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommModemStatus&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommProperties&lt;br /&gt;
; Description ...: Retrieves information about the communications properties for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommProperties(Const $hFile[, $tCOMMPROP = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCOMMPROP           - [out] A COMMPROP structure in which the communications properties information is returned.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363259(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommProperties(Const $hFile, $tCOMMPROP = 0)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommProperties&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCOMMPROP))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommProperties&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommState&lt;br /&gt;
; Description ...: Retrieves the current control settings for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommState(Const $hFile, $tDCB = 0)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tDCB                - [out] A DCB structure that receives the control settings information.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommState, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363260(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommState(Const $hFile, $tDCB = 0)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommState&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDCB))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommState&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommTimeouts&lt;br /&gt;
; Description ...: Retrieves the time-out parameters for all read and write operations on a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommTimeouts(Const $hFile, $tCommTimeouts = 0)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCommTimeouts       - [out] A COMMTIMEOUTS structure in which the time-out information is returned.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommTimeouts, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363261(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommTimeouts(Const $hFile, $tCommTimeouts = 0)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommTimeouts&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_PurgeComm&lt;br /&gt;
; Description ...: Discards all characters from the output or input buffer of a specified communications resource.&lt;br /&gt;
;                  It can also terminate pending read or write operations on the resource.&lt;br /&gt;
; Syntax ........: _CommAPI_PurgeComm(Const $hFile[, $iFlags = $PURGE_ALL])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iFlags              - [in] An integer value.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363428(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_PurgeComm(Const $hFile, Const $iFlags = $PURGE_ALL)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;PurgeComm&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iFlags)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_PurgeComm&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommBreak&lt;br /&gt;
; Description ...: Suspends character transmission for a specified communications device and places the transmission line in a break state until the ClearCommBreak function is called.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommBreak(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363433(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommBreak(Const $hFile)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommBreak&amp;quot;, &amp;quot;handle&amp;quot;, $hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommBreak&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommMask&lt;br /&gt;
; Description ...: Specifies a set of events to be monitored for a communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommMask(Const $hFile, Const $iEventMask)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iEventMask          - [in] The events to be enabled. A value of zero disables all events.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363435(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommMask(Const $hFile, Const $iEventMask)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommMask&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iEventMask)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommMask&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommState&lt;br /&gt;
; Description ...: Configures a communications device according to the specifications in a device-control block.&lt;br /&gt;
;                  The function reinitializes all hardware and control settings, but it does not empty output or input queues.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommState(Const $hFile, Const $tDCB)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tDCB                - [in] A DCB structure that contains the configuration information for the specified communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommState, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363436(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommState(Const $hFile, Const $tDCB)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommState&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDCB))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommState&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommTimeouts&lt;br /&gt;
; Description ...: Sets the time-out parameters for all read and write operations on a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommTimeouts(Const $hFile, Const $tCommTimeouts)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCommTimeouts       - [in] A COMMTIMEOUTS structure that contains the new time-out values.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommTimeouts, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363437(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommTimeouts(Const $hFile, Const $tCommTimeouts)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommTimeouts&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetupComm&lt;br /&gt;
; Description ...: Initializes the communications parameters for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetupComm(Const $hFile, Const $iInQueue, Const $iOutQueue)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iInQueue            - [in] The recommended size of the device&#039;s internal input buffer, in bytes.&lt;br /&gt;
;                  $iOutQueue           - [in] The recommended size of the device&#039;s internal output buffer, in bytes.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363439(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetupComm(Const $hFile, Const $iInQueue, Const $iOutQueue)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetupComm&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iInQueue, &amp;quot;dword&amp;quot;, $iOutQueue)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetupComm&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitCommChar&lt;br /&gt;
; Description ...: Transmits a specified character ahead of any pending data in the output buffer of the specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitCommChar(Const $hFile, Const $cChar)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sChar               - [in] The character to be transmitted.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363473(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitCommChar(Const $hFile, Const $cChar)&lt;br /&gt;
	Local $tChar = DllStructCreate(&amp;quot;char&amp;quot;)&lt;br /&gt;
	DllStructSetData($tChar, 1, $cChar)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;TransmitCommChar&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;char&amp;quot;, $tChar)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_TransmitCommChar&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_WaitCommEvent&lt;br /&gt;
; Description ...: Waits for an event to occur for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_WaitCommEvent(Const $hFile [, Const $tOverlapped = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tOverlapped         - [in] An OVERLAPPED structure.&lt;br /&gt;
; Return values .: Success - A mask indicating the type of event that occurred.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_EscapeCommFunction, _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363479(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_WaitCommEvent(Const $hFile, Const $tOverlapped = 0)&lt;br /&gt;
	Local $pOverlapped = DllStructGetPtr($tOverlapped)&lt;br /&gt;
	If Not $pOverlapped Then $pOverlapped = DllStructGetPtr(DllStructCreate($tagOverlapped))&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;WaitCommEvent&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0, &amp;quot;ptr&amp;quot;, $pOverlapped)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If Not $aResult[2] Then Return SetError(-1, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_WaitCommEvent&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPIConstants.au3&amp;diff=12344</id>
		<title>CommAPIConstants.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPIConstants.au3&amp;diff=12344"/>
		<updated>2014-03-31T09:22:34Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: fix _CommAPI_WaitCommEvent&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommAPIConstants.au3&lt;br /&gt;
; Title .........: Communications structures and constants of Windows API&lt;br /&gt;
; Description ...: Communications structures of Windows API have been translated to AutoIt structures.&lt;br /&gt;
; Version Date ..: 2014-03-31&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363199(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;StructureConstants.au3&amp;quot;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global Const $tagCOMMPROP = _&lt;br /&gt;
		&amp;quot;WORD  wPacketLength;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  wPacketVersion;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwServiceMask;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwReserved1;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxTxQueue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxRxQueue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxBaud;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwProvSubType;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwProvCapabilities;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSettableParams;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSettableBaud;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  wSettableData;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  wSettableStopParity;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwCurrentTxQueue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwCurrentRxQueue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwProvSpec1;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwProvSpec2;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WCHAR wcProvChar[1];&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Global Const $tagCOMMTIMEOUTS = _&lt;br /&gt;
		&amp;quot;DWORD ReadIntervalTimeout;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD ReadTotalTimeoutMultiplier;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD ReadTotalTimeoutConstant;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD WriteTotalTimeoutMultiplier;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD WriteTotalTimeoutConstant;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cs&lt;br /&gt;
	http://msdn.microsoft.com/en-us/library/aa363200(v=vs.85).aspx&lt;br /&gt;
	The eight actual COMSTAT bit-sized data fields within the four bytes of fBitFields can be manipulated by bitwise logical And/Or operations.&lt;br /&gt;
	FieldName           Bits    Description&lt;br /&gt;
	-----------------   -----   ---------------------------&lt;br /&gt;
	fCtsHold             1      Tx waiting for CTS signal&lt;br /&gt;
	fDsrHold             2      Tx waiting for DSR signal&lt;br /&gt;
	fRlsdHold            3      Tx waiting for RLSD signal&lt;br /&gt;
	fXoffHold            4      Tx waiting, XOFF char rec&#039;d&lt;br /&gt;
	fXoffSent            5      Tx waiting, XOFF char sent&lt;br /&gt;
	fEof                 6      EOF character sent&lt;br /&gt;
	fTxim                7      character waiting for Tx&lt;br /&gt;
	fReserved            8-32   reserved (25 bits)&lt;br /&gt;
#ce&lt;br /&gt;
&lt;br /&gt;
Global Const $tagCOMSTAT = _&lt;br /&gt;
		&amp;quot;DWORD fBitFields;&amp;quot; &amp;amp; _ ; see comment above&lt;br /&gt;
		&amp;quot;DWORD cbInQue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD cbOutQue;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cs&lt;br /&gt;
	http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
	The fourteen actual DCB bit-sized data fields within the four bytes of fBitFields can be manipulated by bitwise logical And/Or operations.&lt;br /&gt;
	FieldName           Bits    Description&lt;br /&gt;
	-----------------   -----   ---------------------------&lt;br /&gt;
	fBinary              1      binary mode, no EOF check&lt;br /&gt;
	fParity              2      enable parity checking&lt;br /&gt;
	fOutxCtsFlow         3      CTS output flow control&lt;br /&gt;
	fOutxDsrFlow         4      DSR output flow control&lt;br /&gt;
	fDtrControl          5-6    DTR flow control type&lt;br /&gt;
	fDsrSensitivity      7      DSR sensitivity&lt;br /&gt;
	fTXContinueOnXoff    8      XOFF continues Tx&lt;br /&gt;
	fOutX                9      XON/XOFF out flow control&lt;br /&gt;
	fInX                10      XON/XOFF in flow control&lt;br /&gt;
	fErrorCHAR          11      enable error replacement&lt;br /&gt;
	fNull               12      enable null stripping&lt;br /&gt;
	fRtsControl         13-14   RTS flow control&lt;br /&gt;
	fAbortOnError       15      abort reads/writes on error&lt;br /&gt;
	fDummy2             16-32   reserved (17 bits)&lt;br /&gt;
#ce&lt;br /&gt;
&lt;br /&gt;
Global Const $tagDCB = _&lt;br /&gt;
		&amp;quot;DWORD DCBlength;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD BaudRate;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD fBitFields;&amp;quot; &amp;amp; _ ; see comment above&lt;br /&gt;
		&amp;quot;WORD  wReserved;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  XonLim;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  XoffLim;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  ByteSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  Parity;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  StopBits;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  XonChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  XoffChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  ErrorChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  EofChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  EvtChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  wReserved1;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Global Const $tagMODEMDEVCAPS = _&lt;br /&gt;
		&amp;quot;DWORD dwActualSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwRequiredSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDevSpecificOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDevSpecificSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemProviderVersion;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemManufacturerOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemManufacturerSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemModelOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemModelSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemVersionOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemVersionSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDialOptions;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwCallSetupFailTimer;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwInactivityTimeout;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSpeakerVolume;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSpeakerMode;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemOptions;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxDTERate;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxDCERate;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  abVariablePortion[1];&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Global Const $tagMODEMSETTINGS = _&lt;br /&gt;
		&amp;quot;DWORD dwActualSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwRequiredSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDevSpecificOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDevSpecificSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwCallSetupFailTimer;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwInactivityTimeout;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSpeakerVolume;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSpeakerMode;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwPreferredModemOptions;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwNegotiatedModemOptions;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwNegotiatedDCERate;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  abVariablePortion[1];&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global Const $SETXOFF = 1&lt;br /&gt;
Global Const $SETXON = 2&lt;br /&gt;
Global Const $SETRTS = 3&lt;br /&gt;
Global Const $CLRRTS = 4&lt;br /&gt;
Global Const $SETDTR = 5&lt;br /&gt;
Global Const $CLRDTR = 6&lt;br /&gt;
Global Const $SETBREAK = 8&lt;br /&gt;
Global Const $CLRBREAK = 9&lt;br /&gt;
&lt;br /&gt;
Global Const $CE_RXOVER = 0x0001&lt;br /&gt;
Global Const $CE_OVERRUN = 0x0002&lt;br /&gt;
Global Const $CE_RXPARITY = 0x0004&lt;br /&gt;
Global Const $CE_FRAME = 0x0008&lt;br /&gt;
Global Const $CE_BREAK = 0x0010&lt;br /&gt;
&lt;br /&gt;
Global Const $EV_RXCHAR = 0x0001&lt;br /&gt;
Global Const $EV_RXFLAG = 0x0002&lt;br /&gt;
Global Const $EV_TXEMPTY = 0x0004&lt;br /&gt;
Global Const $EV_CTS = 0x0008&lt;br /&gt;
Global Const $EV_DSR = 0x0010&lt;br /&gt;
Global Const $EV_RLSD = 0x0020&lt;br /&gt;
Global Const $EV_BREAK = 0x0040&lt;br /&gt;
Global Const $EV_ERR = 0x0080&lt;br /&gt;
Global Const $EV_RING = 0x0100&lt;br /&gt;
Global Const $EV_PERR = 0x0200&lt;br /&gt;
Global Const $EV_RX80FULL = 0x0400&lt;br /&gt;
Global Const $EV_EVENT1 = 0x0800&lt;br /&gt;
Global Const $EV_EVENT2 = 0x1000&lt;br /&gt;
&lt;br /&gt;
Global Const $MS_CTS_ON = 0x0010&lt;br /&gt;
Global Const $MS_DSR_ON = 0x0020&lt;br /&gt;
Global Const $MS_RING_ON = 0x0040&lt;br /&gt;
Global Const $MS_RLSD_ON = 0x0080&lt;br /&gt;
&lt;br /&gt;
Global Const $PURGE_TXABORT = 0x0001&lt;br /&gt;
Global Const $PURGE_RXABORT = 0x0002&lt;br /&gt;
Global Const $PURGE_TXCLEAR = 0x0004&lt;br /&gt;
Global Const $PURGE_RXCLEAR = 0x0008&lt;br /&gt;
Global Const $PURGE_ALL = 0x000F&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12343</id>
		<title>CommAPI</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12343"/>
		<updated>2014-03-31T09:22:00Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: /* Changelog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CommAPI translates the communications functions of Windows API to AutoIt functions.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
=== Features ===&lt;br /&gt;
* No need to install DLL&#039;s&lt;br /&gt;
* Using Windows API calls (kernel32.dll)&lt;br /&gt;
* Possibility of serial communication (serial port, COM port, RS-232)&lt;br /&gt;
* Possibility of parallel communication (parallel port, LPT port)&lt;br /&gt;
* No use of global variables&lt;br /&gt;
* Uniform namespace _CommAPI_XXX&lt;br /&gt;
* Modular organization into files&lt;br /&gt;
* A lot of additional utility and helper functions&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
* [[CommAPIConstants.au3]]&lt;br /&gt;
* [[CommAPI.au3]]&lt;br /&gt;
* [[CommAPIHelper.au3]]&lt;br /&gt;
* [[CommUtilities.au3]]&lt;br /&gt;
* [[CommInterface.au3]]&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
[[CommAPI Examples]] shows you some examples. Mayby you could find more examples in [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/?p=1126366 forum].&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
=== History ===&lt;br /&gt;
* 2008-09-12 Creation of cfx.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/#entry578111 (V1.0)]&lt;br /&gt;
* 2011-02-18 Conversation of cfx.au3 into cfxUDF.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry872154 (V2.0)]&lt;br /&gt;
* 2011-02-28 Update V2.0to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry874547 V2.1]&lt;br /&gt;
* 2011-04-27 Update V2.1 to [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=217993#post217993 V2.2] (german forum)&lt;br /&gt;
* 2013-07-10 Modify V2.1 to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry1094288 V2.1mod]&lt;br /&gt;
* 2013-10-24 Creation of [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ CommAPI.au3]&lt;br /&gt;
&lt;br /&gt;
=== Changelog ===&lt;br /&gt;
; 2014-01-23&lt;br /&gt;
: Small update of method _CommAPI_CreateModeString&lt;br /&gt;
; 2014-02-03&lt;br /&gt;
: Change timeout handling (Attention: not backward compatible)&lt;br /&gt;
: Small update of method _CommAPI_PurgeComm&lt;br /&gt;
; 2014-03-07&lt;br /&gt;
: Rename CommAPIStructures.au3 to CommAPIConstants.au3&lt;br /&gt;
: Replace hex values with Constants&lt;br /&gt;
; 2014-03-27&lt;br /&gt;
: Update of call _WinAPI_CreateFile&lt;br /&gt;
: Updated @error handling&lt;br /&gt;
: New parameter MaxLen for function _CommAPI_ReceiveData&lt;br /&gt;
: New function _CommAPI_ReceiveLine&lt;br /&gt;
: Update existing examples and add new examples&lt;br /&gt;
; 2014-03-31&lt;br /&gt;
: Add constants&lt;br /&gt;
: Fix _CommAPI_WaitCommEvent&lt;br /&gt;
&lt;br /&gt;
=== Roadmap ===&lt;br /&gt;
There is no roadmap in the moment. Feel free to implement the last five remaining API calls, enhance the scripts or to fix bugs.&lt;br /&gt;
&lt;br /&gt;
=== Support ===&lt;br /&gt;
There is no official support. Try to get help from community in the official forum. [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ Here you can find the main thread].&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx MSDN Library of communications functions]&lt;br /&gt;
* [http://www.hpcc.ecs.soton.ac.uk/software/Win32API.Txt WIN32API.TXT]&lt;br /&gt;
* cfxUDF.au3 (see section above)&lt;br /&gt;
* [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=198669#post198669 GetCOMPorts] (german forum)&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/19713-problem-with-struct/#entry136466 ParseCommState]&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== Implemented API functions ===&lt;br /&gt;
* BuildCommDCB&lt;br /&gt;
* BuildCommDCBAndTimeouts&lt;br /&gt;
* ClearCommBreak&lt;br /&gt;
* ClearCommError&lt;br /&gt;
* EscapeCommFunction&lt;br /&gt;
* GetCommMask&lt;br /&gt;
* GetCommModemStatus&lt;br /&gt;
* GetCommProperties&lt;br /&gt;
* GetCommState&lt;br /&gt;
* GetCommTimeouts&lt;br /&gt;
* PurgeComm&lt;br /&gt;
* SetCommBreak&lt;br /&gt;
* SetCommMask&lt;br /&gt;
* SetCommState&lt;br /&gt;
* SetCommTimeouts&lt;br /&gt;
* SetupComm&lt;br /&gt;
* TransmitCommChar&lt;br /&gt;
* WaitCommEvent&lt;br /&gt;
&lt;br /&gt;
=== Unimplemented API functions ===&lt;br /&gt;
* CommConfigDialog&lt;br /&gt;
* GetCommConfig&lt;br /&gt;
* GetDefaultCommConfig&lt;br /&gt;
* SetCommConfig&lt;br /&gt;
* SetDefaultCommConfig&lt;br /&gt;
&lt;br /&gt;
=== API helper functions ===&lt;br /&gt;
* ChangeCommStateElement&lt;br /&gt;
* ChangeCommTimeoutsElement&lt;br /&gt;
* GetCommStateElement&lt;br /&gt;
* GetCommTimeoutsElement&lt;br /&gt;
* IsOnCTS&lt;br /&gt;
* IsOnDCD&lt;br /&gt;
* IsOnDSR&lt;br /&gt;
* IsOnRI&lt;br /&gt;
* SetCommStateElement&lt;br /&gt;
* SetCommTimeoutsElement&lt;br /&gt;
* SetOnDTR&lt;br /&gt;
* SetOnRTS&lt;br /&gt;
&lt;br /&gt;
=== Utility functions ===&lt;br /&gt;
* CommStateToString&lt;br /&gt;
* CommTimeoutsToString&lt;br /&gt;
* CreateModeString&lt;br /&gt;
* GetCOMPorts&lt;br /&gt;
&lt;br /&gt;
=== Interface functions ===&lt;br /&gt;
* ClosePort&lt;br /&gt;
* OpenCOMPort&lt;br /&gt;
* OpenPort&lt;br /&gt;
* ReceiveData&lt;br /&gt;
* TransmitData&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI.au3&amp;diff=12342</id>
		<title>CommAPI.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI.au3&amp;diff=12342"/>
		<updated>2014-03-31T09:21:19Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: fix _CommAPI_WaitCommEvent&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommAPI.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-03-31&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPIConstants.au3&amp;quot;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_BuildCommDCB&lt;br /&gt;
; Description ...: Fills a specified DCB structure with values specified in a device-control string.&lt;br /&gt;
; Syntax ........: _CommAPI_BuildCommDCB(Const $sMode, Byref $tDBC)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
;                  $tDBC                - [out] A DCB structure.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_BuildCommDCBAndTimeouts, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363143(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_BuildCommDCB(Const $sMode, ByRef $tDBC)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;BuildCommDCB&amp;quot;, &amp;quot;str&amp;quot;, $sMode, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDBC))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_BuildCommDCB&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_BuildCommDCBAndTimeouts&lt;br /&gt;
; Description ...: Translates a device-definition string into appropriate device-control block codes and places them into a device control block.&lt;br /&gt;
;                  The function can also set up time-out values for a device.&lt;br /&gt;
; Syntax ........: _CommAPI_BuildCommDCBAndTimeouts(Const $sMode, Byref $tDBC, Byref $tCommTimeouts)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
;                  $tDBC                - [out] A DCB structure.&lt;br /&gt;
;                  $tCommTimeouts       - [out] A COMMTIMEOUTS structure.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_BuildCommDCB, $tagDCB, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363145(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_BuildCommDCBAndTimeouts(Const $sMode, ByRef $tDBC, ByRef $tCommTimeouts)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;BuildCommDCBAndTimeouts&amp;quot;, &amp;quot;str&amp;quot;, $sMode, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDBC), &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_BuildCommDCBAndTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClearCommBreak&lt;br /&gt;
; Description ...: Restores character transmission for a specified communications device and places the transmission line in a nonbreak state.&lt;br /&gt;
; Syntax ........: _CommAPI_ClearCommBreak(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ClearCommError&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363179(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClearCommBreak(Const $hFile)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;ClearCommBreak&amp;quot;, &amp;quot;handle&amp;quot;, $hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClearCommBreak&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClearCommError&lt;br /&gt;
; Description ...: Retrieves information about a communications error and reports the current status of a communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ClearCommError(Const $hFile[, $tComStat = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tComStat            - [out] A COMSTAT structure in which the device&#039;s status information is returned.&lt;br /&gt;
; Return values .: Success - A mask indicating the type of error.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ClearCommBreak, $tagCOMSTAT&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363180(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClearCommError(Const $hFile, $tComStat = 0)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;ClearCommError&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tComStat))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClearCommError&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_EscapeCommFunction&lt;br /&gt;
; Description ...: Directs the specified communications device to perform an extended function.&lt;br /&gt;
; Syntax ........: _CommAPI_EscapeCommFunction(Const $hFile, Const $iFunction)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iFunction           - [in] The extended function to be performed.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetOnDTR, _CommAPI_SetOnRTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363254(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_EscapeCommFunction(Const $hFile, Const $iFunction)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;EscapeCommFunction&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iFunction)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_EscapeCommFunction&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommMask&lt;br /&gt;
; Description ...: Retrieves the value of the event mask for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommMask(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - A mask of events that are currently enabled.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363257(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommMask(Const $hFile)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommMask&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommMask&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Description ...: Retrieves the modem control-register values.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommModemStatus(Const $hFile, Byref $pModemStatus)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - The current state of the modem control-register values.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_IsOnCTS, _CommAPI_IsOnDSR, _CommAPI_IsOnRI, _CommAPI_IsOnDCD, _CommAPI_WaitCommEvent&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommModemStatus(Const $hFile)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommModemStatus&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommModemStatus&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommProperties&lt;br /&gt;
; Description ...: Retrieves information about the communications properties for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommProperties(Const $hFile[, $tCOMMPROP = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCOMMPROP           - [out] A COMMPROP structure in which the communications properties information is returned.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363259(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommProperties(Const $hFile, $tCOMMPROP = 0)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommProperties&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCOMMPROP))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommProperties&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommState&lt;br /&gt;
; Description ...: Retrieves the current control settings for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommState(Const $hFile, $tDCB = 0)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tDCB                - [out] A DCB structure that receives the control settings information.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommState, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363260(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommState(Const $hFile, $tDCB = 0)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommState&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDCB))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommState&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommTimeouts&lt;br /&gt;
; Description ...: Retrieves the time-out parameters for all read and write operations on a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommTimeouts(Const $hFile, $tCommTimeouts = 0)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCommTimeouts       - [out] A COMMTIMEOUTS structure in which the time-out information is returned.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommTimeouts, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363261(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommTimeouts(Const $hFile, $tCommTimeouts = 0)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommTimeouts&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_PurgeComm&lt;br /&gt;
; Description ...: Discards all characters from the output or input buffer of a specified communications resource.&lt;br /&gt;
;                  It can also terminate pending read or write operations on the resource.&lt;br /&gt;
; Syntax ........: _CommAPI_PurgeComm(Const $hFile[, $iFlags = $PURGE_ALL])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iFlags              - [in] An integer value.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363428(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_PurgeComm(Const $hFile, Const $iFlags = $PURGE_ALL)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;PurgeComm&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iFlags)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_PurgeComm&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommBreak&lt;br /&gt;
; Description ...: Suspends character transmission for a specified communications device and places the transmission line in a break state until the ClearCommBreak function is called.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommBreak(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363433(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommBreak(Const $hFile)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommBreak&amp;quot;, &amp;quot;handle&amp;quot;, $hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommBreak&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommMask&lt;br /&gt;
; Description ...: Specifies a set of events to be monitored for a communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommMask(Const $hFile, Const $iEventMask)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iEventMask          - [in] The events to be enabled. A value of zero disables all events.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363435(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommMask(Const $hFile, Const $iEventMask)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommMask&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iEventMask)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommMask&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommState&lt;br /&gt;
; Description ...: Configures a communications device according to the specifications in a device-control block.&lt;br /&gt;
;                  The function reinitializes all hardware and control settings, but it does not empty output or input queues.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommState(Const $hFile, Const $tDCB)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tDCB                - [in] A DCB structure that contains the configuration information for the specified communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommState, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363436(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommState(Const $hFile, Const $tDCB)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommState&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDCB))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommState&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommTimeouts&lt;br /&gt;
; Description ...: Sets the time-out parameters for all read and write operations on a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommTimeouts(Const $hFile, Const $tCommTimeouts)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCommTimeouts       - [in] A COMMTIMEOUTS structure that contains the new time-out values.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommTimeouts, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363437(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommTimeouts(Const $hFile, Const $tCommTimeouts)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommTimeouts&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetupComm&lt;br /&gt;
; Description ...: Initializes the communications parameters for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetupComm(Const $hFile, Const $iInQueue, Const $iOutQueue)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iInQueue            - [in] The recommended size of the device&#039;s internal input buffer, in bytes.&lt;br /&gt;
;                  $iOutQueue           - [in] The recommended size of the device&#039;s internal output buffer, in bytes.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363439(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetupComm(Const $hFile, Const $iInQueue, Const $iOutQueue)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetupComm&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iInQueue, &amp;quot;dword&amp;quot;, $iOutQueue)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetupComm&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitCommChar&lt;br /&gt;
; Description ...: Transmits a specified character ahead of any pending data in the output buffer of the specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitCommChar(Const $hFile, Const $cChar)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sChar               - [in] The character to be transmitted.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363473(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitCommChar(Const $hFile, Const $cChar)&lt;br /&gt;
	Local $tChar = DllStructCreate(&amp;quot;char&amp;quot;)&lt;br /&gt;
	DllStructSetData($tChar, 1, $cChar)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;TransmitCommChar&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;char&amp;quot;, $tChar)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_TransmitCommChar&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_WaitCommEvent&lt;br /&gt;
; Description ...: Waits for an event to occur for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_WaitCommEvent(Const $hFile [, Const $tOverlapped = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tOverlapped         - [in] An OVERLAPPED structure.&lt;br /&gt;
; Return values .: Success - A mask indicating the type of event that occurred.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_EscapeCommFunction, _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363479(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_WaitCommEvent(Const $hFile, Const $tOverlapped = 0)&lt;br /&gt;
	Local $pOverlapped = DllStructGetPtr($tOverlapped)&lt;br /&gt;
	If Not $pOverlapped Then $pOverlapped = DllStructGetPtr(DllStructCreate($tagOverlapped))&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;WaitCommEvent&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0, &amp;quot;ptr&amp;quot;, $pOverlapped)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If Not $aResult Then Return SetError(-1, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_WaitCommEvent&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12340</id>
		<title>CommAPI</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12340"/>
		<updated>2014-03-27T15:27:10Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: /* Changelog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CommAPI translates the communications functions of Windows API to AutoIt functions.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
=== Features ===&lt;br /&gt;
* No need to install DLL&#039;s&lt;br /&gt;
* Using Windows API calls (kernel32.dll)&lt;br /&gt;
* Possibility of serial communication (serial port, COM port, RS-232)&lt;br /&gt;
* Possibility of parallel communication (parallel port, LPT port)&lt;br /&gt;
* No use of global variables&lt;br /&gt;
* Uniform namespace _CommAPI_XXX&lt;br /&gt;
* Modular organization into files&lt;br /&gt;
* A lot of additional utility and helper functions&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
* [[CommAPIConstants.au3]]&lt;br /&gt;
* [[CommAPI.au3]]&lt;br /&gt;
* [[CommAPIHelper.au3]]&lt;br /&gt;
* [[CommUtilities.au3]]&lt;br /&gt;
* [[CommInterface.au3]]&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
[[CommAPI Examples]] shows you some examples. Mayby you could find more examples in [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/?p=1126366 forum].&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
=== History ===&lt;br /&gt;
* 2008-09-12 Creation of cfx.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/#entry578111 (V1.0)]&lt;br /&gt;
* 2011-02-18 Conversation of cfx.au3 into cfxUDF.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry872154 (V2.0)]&lt;br /&gt;
* 2011-02-28 Update V2.0to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry874547 V2.1]&lt;br /&gt;
* 2011-04-27 Update V2.1 to [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=217993#post217993 V2.2] (german forum)&lt;br /&gt;
* 2013-07-10 Modify V2.1 to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry1094288 V2.1mod]&lt;br /&gt;
* 2013-10-24 Creation of [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ CommAPI.au3]&lt;br /&gt;
&lt;br /&gt;
=== Changelog ===&lt;br /&gt;
; 2014-01-23&lt;br /&gt;
: Small update of method _CommAPI_CreateModeString&lt;br /&gt;
; 2014-02-03&lt;br /&gt;
: Change timeout handling (Attention: not backward compatible)&lt;br /&gt;
: Small update of method _CommAPI_PurgeComm&lt;br /&gt;
; 2014-03-07	&lt;br /&gt;
: Rename CommAPIStructures.au3 to CommAPIConstants.au3&lt;br /&gt;
: Replace hex values with Constants&lt;br /&gt;
; 2014-03-27	&lt;br /&gt;
: Update of call _WinAPI_CreateFile&lt;br /&gt;
: Updated @error handling&lt;br /&gt;
: New parameter MaxLen for function _CommAPI_ReceiveData&lt;br /&gt;
: New function _CommAPI_ReceiveLine&lt;br /&gt;
: Update existing examples and add new examples&lt;br /&gt;
&lt;br /&gt;
=== Roadmap ===&lt;br /&gt;
There is no roadmap in the moment. Feel free to implement the last five remaining API calls, enhance the scripts or to fix bugs.&lt;br /&gt;
&lt;br /&gt;
=== Support ===&lt;br /&gt;
There is no official support. Try to get help from community in the official forum. [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ Here you can find the main thread].&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx MSDN Library of communications functions]&lt;br /&gt;
* [http://www.hpcc.ecs.soton.ac.uk/software/Win32API.Txt WIN32API.TXT]&lt;br /&gt;
* cfxUDF.au3 (see section above)&lt;br /&gt;
* [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=198669#post198669 GetCOMPorts] (german forum)&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/19713-problem-with-struct/#entry136466 ParseCommState]&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== Implemented API functions ===&lt;br /&gt;
* BuildCommDCB&lt;br /&gt;
* BuildCommDCBAndTimeouts&lt;br /&gt;
* ClearCommBreak&lt;br /&gt;
* ClearCommError&lt;br /&gt;
* EscapeCommFunction&lt;br /&gt;
* GetCommMask&lt;br /&gt;
* GetCommModemStatus&lt;br /&gt;
* GetCommProperties&lt;br /&gt;
* GetCommState&lt;br /&gt;
* GetCommTimeouts&lt;br /&gt;
* PurgeComm&lt;br /&gt;
* SetCommBreak&lt;br /&gt;
* SetCommMask&lt;br /&gt;
* SetCommState&lt;br /&gt;
* SetCommTimeouts&lt;br /&gt;
* SetupComm&lt;br /&gt;
* TransmitCommChar&lt;br /&gt;
* WaitCommEvent&lt;br /&gt;
&lt;br /&gt;
=== Unimplemented API functions ===&lt;br /&gt;
* CommConfigDialog&lt;br /&gt;
* GetCommConfig&lt;br /&gt;
* GetDefaultCommConfig&lt;br /&gt;
* SetCommConfig&lt;br /&gt;
* SetDefaultCommConfig&lt;br /&gt;
&lt;br /&gt;
=== API helper functions ===&lt;br /&gt;
* ChangeCommStateElement&lt;br /&gt;
* ChangeCommTimeoutsElement&lt;br /&gt;
* GetCommStateElement&lt;br /&gt;
* GetCommTimeoutsElement&lt;br /&gt;
* IsOnCTS&lt;br /&gt;
* IsOnDCD&lt;br /&gt;
* IsOnDSR&lt;br /&gt;
* IsOnRI&lt;br /&gt;
* SetCommStateElement&lt;br /&gt;
* SetCommTimeoutsElement&lt;br /&gt;
* SetOnDTR&lt;br /&gt;
* SetOnRTS&lt;br /&gt;
&lt;br /&gt;
=== Utility functions ===&lt;br /&gt;
* CommStateToString&lt;br /&gt;
* CommTimeoutsToString&lt;br /&gt;
* CreateModeString&lt;br /&gt;
* GetCOMPorts&lt;br /&gt;
&lt;br /&gt;
=== Interface functions ===&lt;br /&gt;
* ClosePort&lt;br /&gt;
* OpenCOMPort&lt;br /&gt;
* OpenPort&lt;br /&gt;
* ReceiveData&lt;br /&gt;
* TransmitData&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12339</id>
		<title>CommInterface.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12339"/>
		<updated>2014-03-27T15:25:36Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: updated @error handling; new parameter MaxLen for function _CommAPI_ReceiveData; new function _CommAPI_ReceiveLine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommInterface.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-03-27&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPIHelper.au3&amp;quot;&lt;br /&gt;
#include &amp;quot;CommUtilities.au3&amp;quot;&lt;br /&gt;
#include &amp;lt;WinAPI.au3&amp;gt;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClosePort&lt;br /&gt;
; Description ...: CLoses a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
	Local $fResult = _WinAPI_CloseHandle($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, 0, False)&lt;br /&gt;
	Return $fResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClosePort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenCOMPort&lt;br /&gt;
; Description ...: Opens a COM Port.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenCOMPort(Const $iPort[, $iBaudRate = Default[, $iParity = Default[, $iByteSize = Default[,&lt;br /&gt;
;                  $iStopBits = Default]]]])&lt;br /&gt;
; Parameters ....: $iPort               - [in] A port number.&lt;br /&gt;
;                  $iBaudRate           - [in] The baud rate at which the communications device operates.&lt;br /&gt;
;                  $iParity             - [in] The parity scheme to be used.&lt;br /&gt;
;                  $iByteSize           - [in] Specifies the number of data bits in a character.&lt;br /&gt;
;                  $iStopBits           - [in] Specifies the number of stop bits that define the end of a character: 1, 1.5, or 2.&lt;br /&gt;
; Return values .: Success - The open handle to a specified communications device.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort, _CommAPI_ClosePort, _CommAPI_CreateModeString&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenCOMPort(Const $iPort, Const $iBaudRate = Default, Const $iParity = Default, Const $iByteSize = Default, Const $iStopBits = Default)&lt;br /&gt;
	Local $sMode = _CommAPI_CreateModeString($iPort, $iBaudRate, $iParity, $iByteSize, $iStopBits)&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($sMode)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenCOMPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenPort&lt;br /&gt;
; Description ...: Opens a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
; Return values .: Success - The open handle to a specified communications device.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                            11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenCOMPort, _CommAPI_ClosePort, _CommAPI_SetCommState&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365430(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
	Local $sFileName = &amp;quot;\\.\&amp;quot; &amp;amp; StringLeft($sMode, StringInStr($sMode, &amp;quot;:&amp;quot;) - 1)&lt;br /&gt;
	Local $hFile = _WinAPI_CreateFile($sFileName, 3, 6)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If $hFile &amp;lt;= 0 Then Return SetError(-1, @ScriptLineNumber, 0)&lt;br /&gt;
&lt;br /&gt;
	Local $tDCB = DllStructCreate($tagDCB)&lt;br /&gt;
	Local $tCommTimeouts = DllStructCreate($tagCOMMTIMEOUTS)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_BuildCommDCB($sMode, $tDCB)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;ReadTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;WriteTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	If Not _CommAPI_SetCommState($hFile, $tDCB) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	If Not _CommAPI_SetCommTimeouts($hFile, $tCommTimeouts) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveData&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveData(Const $hFile[, $iTimeout = 1[, $iMaxLen = 0]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLen             - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
; Return values .: Success - Received string&lt;br /&gt;
;                  Failure - Received or empty string&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......: If the result contains Chr(0), you should convert the result with function Binary().&lt;br /&gt;
; Related .......: _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveData(Const $hFile, Const $iTimeout = 1, Const $iMaxLen = 0)&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;char&amp;quot;)&lt;br /&gt;
	Local $hTimer = TimerInit()&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	While 1&lt;br /&gt;
		_WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), 1, $iWritten)&lt;br /&gt;
		If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
		If $iWritten Then&lt;br /&gt;
			$sResult &amp;amp;= DllStructGetData($tBuffer, 1)&lt;br /&gt;
			If $iMaxLen &amp;gt; 0 And $iMaxLen = StringLen($sResult) Then Return $sResult&lt;br /&gt;
		Else&lt;br /&gt;
			If $sResult Then Return $sResult&lt;br /&gt;
			If $iTimeout &amp;gt;= 0 And $iTimeout &amp;lt; TimerDiff($hTimer) Then Return SetError(-2, @ScriptLineNumber, $sResult)&lt;br /&gt;
		EndIf&lt;br /&gt;
	WEnd&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ReceiveData&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveLine&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveLine(Const $hFile[, $sSeparator = @CRLF[, $iTimeout = 1[, $iMaxLen = 0]]])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sSeparator          - [in] A string value which is used as a separator.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
;                  $iMaxLen             - [in] An integer value for maximum length of result.&lt;br /&gt;
;                                              Is activated only by positive values.&lt;br /&gt;
; Return values .: Success - Received string including separator&lt;br /&gt;
;                  Failure - Received or empty string&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -2 timeout&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......: If the result contains Chr(0), you should convert the result with function Binary().&lt;br /&gt;
;                  To remove separator from result, you can use function StringTrimRight($sResult, StringLen($sSeparator)).&lt;br /&gt;
; Related .......: _CommAPI_TransmitData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveLine(Const $hFile, Const $sSeparator = @CRLF, Const $iTimeout = 1, Const $iMaxLen = 0)&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;char&amp;quot;)&lt;br /&gt;
	Local $iLen = StringLen($sSeparator)&lt;br /&gt;
	Local $hTimer = TimerInit()&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	While 1&lt;br /&gt;
		_WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), 1, $iWritten)&lt;br /&gt;
		If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
		If $iWritten Then&lt;br /&gt;
			$sResult &amp;amp;= DllStructGetData($tBuffer, 1)&lt;br /&gt;
			If $iMaxLen &amp;gt; 0 And $iMaxLen = StringLen($sResult) Then Return $sResult&lt;br /&gt;
			If StringRight($sResult, $iLen) == $sSeparator Then Return $sResult&lt;br /&gt;
		Else&lt;br /&gt;
			If $iTimeout &amp;gt;= 0 And $iTimeout &amp;lt; TimerDiff($hTimer) Then Return SetError(-2, @ScriptLineNumber, $sResult)&lt;br /&gt;
		EndIf&lt;br /&gt;
	WEnd&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitData&lt;br /&gt;
; Description ...: Transmits data (TxD/TX/TD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sData               - [in] A string value to transmit.&lt;br /&gt;
; Return values .: Success - The number of bytes written.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveData&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;byte[&amp;quot; &amp;amp; StringLen($sData) &amp;amp; &amp;quot;]&amp;quot;)&lt;br /&gt;
	DllStructSetData($tBuffer, 1, $sData)&lt;br /&gt;
	_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), StringLen($sData), $iWritten)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $iWritten&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_TransmitData&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommUtilities.au3&amp;diff=12338</id>
		<title>CommUtilities.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommUtilities.au3&amp;diff=12338"/>
		<updated>2014-03-27T15:23:58Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: updated @error handling&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommUtilities.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-03-07&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link(s) .......: http://www.autoitscript.com/wiki/CommUtilities.au3&lt;br /&gt;
;                  http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_CommStateToString&lt;br /&gt;
; Description ...: Create a string representation of a DCB structure.&lt;br /&gt;
; Syntax ........: _CommAPI_CommStateToString(Const $tDCB)&lt;br /&gt;
; Parameters ....: $tDCB                - [in] A DCB structure.&lt;br /&gt;
; Return values .: Success - A string representation of a DCB structure.&lt;br /&gt;
;                  Failure - Empty string&lt;br /&gt;
;                  @error  - 11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_CommStateToString(Const $tDCB)&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	Local $vValue = 0&lt;br /&gt;
	For $i = 1 To 15&lt;br /&gt;
		$vValue = DllStructGetData($tDCB, $i)&lt;br /&gt;
		If @error Then Return SetError(@error, @ScriptLineNumber, &amp;quot;&amp;quot;)&lt;br /&gt;
		Switch $i&lt;br /&gt;
			Case 1&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;DCBlength = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 2&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;Baudrate = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 3&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;fBitFields = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fBinary = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 0)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fParity = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 1)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fOutxCTSFlow = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 2)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fOutxDSRFlow = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 3)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fDTRControl = &amp;quot; &amp;amp; BitAND(0x3, BitShift($vValue, 4)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fDsrSensitivity = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 6)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fTXContinueOnXoff = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 7)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fOutX = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 8)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fInX = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 9)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fErrorChar = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 10)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fNull = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 11)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fRTSControl = &amp;quot; &amp;amp; BitAND(0x3, BitShift($vValue, 12)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fAbortOnError = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 14)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;Dymmy2 = &amp;quot; &amp;amp; BitAND(0x1FFFF, BitShift($vValue, 15)) &amp;amp; @CRLF&lt;br /&gt;
			Case 4&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;wReserved = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 5&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;XonLim = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 6&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;XoffLim = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 7&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;ByteSize = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 8&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;Parity = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 1&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;Stopbits = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 10&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;XonChar = &amp;quot; &amp;amp; Binary($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 11&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;XoffChar = &amp;quot; &amp;amp; Binary($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 12&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;ErrorChar = &amp;quot; &amp;amp; Binary($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 13&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;EofChar = &amp;quot; &amp;amp; Binary($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 14&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;EvtChar = &amp;quot; &amp;amp; Binary($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 15&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;wReserved = &amp;quot; &amp;amp; $vValue&lt;br /&gt;
		EndSwitch&lt;br /&gt;
	Next&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_CommStateToString&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_CommTimeoutsToString&lt;br /&gt;
; Description ...: Create s string representation of a COMMTIMEOUTS structure.&lt;br /&gt;
; Syntax ........: _CommAPI_CommTimeoutsToString(Const $tCommTimeouts)&lt;br /&gt;
; Parameters ....: $tCommTimeouts       - [in] A COMMTIMEOUTS structure.&lt;br /&gt;
; Return values .: Success - A string representation of a COMMTIMEOUTS structure.&lt;br /&gt;
;                  Failure - Empty string&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363190(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_CommTimeoutsToString(Const $tCommTimeouts)&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	Local $vValue = 0&lt;br /&gt;
	For $i = 1 To 5&lt;br /&gt;
		$vValue = DllStructGetData($tCommTimeouts, $i)&lt;br /&gt;
		If @error Then Return &amp;quot;&amp;quot;&lt;br /&gt;
		Switch $i&lt;br /&gt;
			Case 1&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;ReadIntervalTimeout = &amp;quot; &amp;amp; String($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 2&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;ReadTotalTimeoutMultiplier = &amp;quot; &amp;amp; String($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 3&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;ReadTotalTimeoutConstant = &amp;quot; &amp;amp; String($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 4&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;WriteTotalTimeoutMultiplier = &amp;quot; &amp;amp; String($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 5&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;WriteTotalTimeoutConstant = &amp;quot; &amp;amp; String($vValue)&lt;br /&gt;
		EndSwitch&lt;br /&gt;
	Next&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_CommTimeoutsToString&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_CreateModeString&lt;br /&gt;
; Description ...: Create definition string&lt;br /&gt;
; Syntax ........: _CommAPI_CreateModeString(Const $iPort[, $iBaudRate = Default[, $iParity = Default[, $iByteSize = Default[,&lt;br /&gt;
;                  $iStopBits = Default[, $iTimeouts = Default[, $iXON = Default[, $iDSR = Default[, $iCTS = Default[,&lt;br /&gt;
;                  $iDTR = Default[, $iRTS = Default[, $iIDSR = Default]]]]]]]]]]])&lt;br /&gt;
; Parameters ....: $iPort               - [in] A port number.&lt;br /&gt;
;                  $iBaudRate           - [in] The baud rate at which the communications device operates.&lt;br /&gt;
;                  $iParity             - [in] The parity scheme to be used.&lt;br /&gt;
;                  $iByteSize           - [in] Specifies the number of data bits in a character.&lt;br /&gt;
;                  $iStopBits           - [in] Specifies the number of stop bits that define the end of a character: 1, 1.5, or 2.&lt;br /&gt;
;                  $iXON                - [in] Specifies whether the xon or xoff protocol for data-flow control is on or off.&lt;br /&gt;
;                  $iDSR                - [in] Specifies whether output handshaking that uses the Data Set Ready (DSR) circuit is on or off.&lt;br /&gt;
;                  $iCTS                - [in] Specifies whether output handshaking that uses the Clear To Send (CTS) circuit is on or off.&lt;br /&gt;
;                  $iDTR                - [in] Specifies whether the Data Terminal Ready (DTR) circuit is on or off or set to handshake.&lt;br /&gt;
;                  $iRTS                - [in] Specifies whether the Request To Send (RTS) circuit is set to on, off, handshake, or toggle.&lt;br /&gt;
;                  $iIDSR               - [in] Specifies whether the DSR circuit sensitivity is on or off.&lt;br /&gt;
; Return values .: Device-control String&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort&lt;br /&gt;
; Link ..........: http://technet.microsoft.com/en-us/library/cc732236.aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_CreateModeString(Const $iPort, Const $iBaudRate = Default, Const $iParity = Default, Const $iByteSize = Default, Const $iStopBits = Default, Const $iXON = Default, $iDSR = Default, $iCTS = Default, $iDTR = Default, $iRTS = Default, $iIDSR = Default)&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	Switch Number($iPort)&lt;br /&gt;
		Case 1 To 256&lt;br /&gt;
			$sResult = &amp;quot;COM&amp;quot; &amp;amp; $iPort &amp;amp; &amp;quot;:&amp;quot;&lt;br /&gt;
		Case Else&lt;br /&gt;
			$sResult = &amp;quot;COM1:&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch Number($iBaudRate)&lt;br /&gt;
		Case 11 To 256000&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; BAUD=&amp;quot; &amp;amp; $iBaudRate&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iParity)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;N&amp;quot;, &amp;quot;NONE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; PARITY=N&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;O&amp;quot;, &amp;quot;ODD&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; PARITY=O&amp;quot;&lt;br /&gt;
		Case &amp;quot;2&amp;quot;, &amp;quot;E&amp;quot;, &amp;quot;EVEN&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; PARITY=E&amp;quot;&lt;br /&gt;
		Case &amp;quot;3&amp;quot;, &amp;quot;M&amp;quot;, &amp;quot;MARK&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; PARITY=M&amp;quot;&lt;br /&gt;
		Case &amp;quot;4&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;SPACE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; PARITY=S&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch Number($iByteSize)&lt;br /&gt;
		Case 5 To 8&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; DATA=&amp;quot; &amp;amp; $iByteSize&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	If IsNumber($iStopBits) Then&lt;br /&gt;
		Switch $iStopBits&lt;br /&gt;
			Case 0&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=1&amp;quot;&lt;br /&gt;
			Case 1&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=1.5&amp;quot;&lt;br /&gt;
			Case 2&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=2&amp;quot;&lt;br /&gt;
		EndSwitch&lt;br /&gt;
	Else&lt;br /&gt;
		Switch StringUpper($iStopBits)&lt;br /&gt;
			Case &amp;quot;1&amp;quot;, &amp;quot;O&amp;quot;, &amp;quot;ONE&amp;quot;&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=1&amp;quot;&lt;br /&gt;
			Case &amp;quot;1.5&amp;quot;, &amp;quot;F&amp;quot;, &amp;quot;FIVE&amp;quot;&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=1.5&amp;quot;&lt;br /&gt;
			Case &amp;quot;2&amp;quot;, &amp;quot;T&amp;quot;, &amp;quot;TWO&amp;quot;&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=2&amp;quot;&lt;br /&gt;
		EndSwitch&lt;br /&gt;
	EndIf&lt;br /&gt;
	Switch StringUpper($iXON)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; XON=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; XON=ON&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iDSR)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; ODSR=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; ODSR=ON&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iCTS)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; OCTS=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; OCTS=ON&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iDTR)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; DTR=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; DTR=ON&amp;quot;&lt;br /&gt;
		Case &amp;quot;2&amp;quot;, &amp;quot;HS&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; DTR=HS&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iRTS)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; RTS=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; RTS=ON&amp;quot;&lt;br /&gt;
		Case &amp;quot;2&amp;quot;, &amp;quot;HS&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; RTS=HS&amp;quot;&lt;br /&gt;
		Case &amp;quot;3&amp;quot;, &amp;quot;TG&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; RTS=TG&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iIDSR)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; IDSR=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; IDSR=ON&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_CreateModeString&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCOMPorts&lt;br /&gt;
; Description ...:&lt;br /&gt;
; Syntax ........: _CommAPI_GetCOMPorts()&lt;br /&gt;
; Parameters ....:&lt;br /&gt;
; Return values .: Success - A string with all COM Ports.&lt;br /&gt;
;                  Failure - Empty string&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCOMPorts()&lt;br /&gt;
	Local $sResult&lt;br /&gt;
	Local $oWMIService = ObjGet(&amp;quot;winmgmts:\\localhost\root\CIMV2&amp;quot;)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, &amp;quot;&amp;quot;)&lt;br /&gt;
	Local $oItems = $oWMIService.ExecQuery(&amp;quot;SELECT * FROM Win32_PnPEntity WHERE Name LIKE &#039;%(COM%)&#039;&amp;quot;, &amp;quot;WQL&amp;quot;, 48)&lt;br /&gt;
	For $oItem In $oItems&lt;br /&gt;
		$sResult &amp;amp;= $oItem.Name &amp;amp; @CRLF&lt;br /&gt;
	Next&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCOMPorts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPIHelper.au3&amp;diff=12337</id>
		<title>CommAPIHelper.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPIHelper.au3&amp;diff=12337"/>
		<updated>2014-03-27T15:22:56Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: updated @error handling&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommAPIHelper.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-03-07&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPI.au3&amp;quot;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ChangeCommStateElement&lt;br /&gt;
; Description ...: Change one control setting for an element of a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ChangeCommStateElement(Const $hFile, Const $sElement, Const $vValue)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sElement            - [in] A element name of DCB structure.&lt;br /&gt;
;                  $vValue              - [in] A new value for the element.&lt;br /&gt;
; Return values .: Success - Previous data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommStateElement, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ChangeCommStateElement(Const $hFile, Const $sElement, Const $vValue)&lt;br /&gt;
	Local $tDCB = DllStructCreate($tagDCB)&lt;br /&gt;
	_CommAPI_GetCommState($hFile, $tDCB)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Local $vResult = _CommAPI_SetCommStateElement($tDCB, $sElement, $vValue)&lt;br /&gt;
	_CommAPI_SetCommState($hFile, $tDCB)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ChangeCommStateElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ChangeCommTimeoutsElement&lt;br /&gt;
; Description ...: Change one time-out parameter for an element off a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ChangeCommTimeoutsElement(Const $hFile, Const $sElement, Const $vValue)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sElement            - [in] A element name of COMMTIMEOUTS structure.&lt;br /&gt;
;                  $vValue              - [in] A new value for the element.&lt;br /&gt;
; Return values .: Success - Previous data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommTimeoutsElement, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363190(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ChangeCommTimeoutsElement(Const $hFile, Const $sElement, Const $vValue)&lt;br /&gt;
	Local $tCommTimeouts = DllStructCreate($tagCOMMTIMEOUTS)&lt;br /&gt;
	_CommAPI_GetCommTimeouts($hFile, $tCommTimeouts)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Local $vResult = _CommAPI_SetCommTimeoutsElement($tCommTimeouts, $sElement, $vValue)&lt;br /&gt;
	_CommAPI_SetCommTimeouts($hFile, $tCommTimeouts)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ChangeCommTimeoutsElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommStateElement&lt;br /&gt;
; Description ...: Retrieves one control setting for an element of a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommStateElement(Const $tDCB, Const $sElement)&lt;br /&gt;
; Parameters ....: $tDCB                - [in] A DCB structure.&lt;br /&gt;
;                  $sElement            - [in] A element name of DCB structure.&lt;br /&gt;
; Return values .: Success - Data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommState, _CommAPI_SetCommStateElement, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommStateElement(Const $tDCB, Const $sElement)&lt;br /&gt;
	Local $vResult = 0&lt;br /&gt;
	Local $iShift = 0&lt;br /&gt;
	Local $bValid = 0x1&lt;br /&gt;
	Switch $sElement&lt;br /&gt;
		Case &amp;quot;fBinary&amp;quot;&lt;br /&gt;
		Case &amp;quot;fParity&amp;quot;&lt;br /&gt;
			$iShift = 1&lt;br /&gt;
		Case &amp;quot;fOutxCTSFlow&amp;quot;&lt;br /&gt;
			$iShift = 2&lt;br /&gt;
		Case &amp;quot;fOutxDSRFlow&amp;quot;&lt;br /&gt;
			$iShift = 3&lt;br /&gt;
		Case &amp;quot;fDTRControl&amp;quot;&lt;br /&gt;
			$iShift = 4&lt;br /&gt;
			$bValid = 0x3&lt;br /&gt;
		Case &amp;quot;fDsrSensitivity&amp;quot;&lt;br /&gt;
			$iShift = 6&lt;br /&gt;
		Case &amp;quot;fTXContinueOnXoff&amp;quot;&lt;br /&gt;
			$iShift = 7&lt;br /&gt;
		Case &amp;quot;fOutX&amp;quot;&lt;br /&gt;
			$iShift = 8&lt;br /&gt;
		Case &amp;quot;fInX&amp;quot;&lt;br /&gt;
			$iShift = 9&lt;br /&gt;
		Case &amp;quot;fErrorChar&amp;quot;&lt;br /&gt;
			$iShift = 10&lt;br /&gt;
		Case &amp;quot;fNull&amp;quot;&lt;br /&gt;
			$iShift = 11&lt;br /&gt;
		Case &amp;quot;fRTSControl&amp;quot;&lt;br /&gt;
			$iShift = 12&lt;br /&gt;
			$bValid = 0x3&lt;br /&gt;
		Case &amp;quot;fAbortOnError&amp;quot;&lt;br /&gt;
			$iShift = 14&lt;br /&gt;
		Case &amp;quot;Dymmy2&amp;quot;&lt;br /&gt;
			$iShift = 15&lt;br /&gt;
			$bValid = 0x1FFFF&lt;br /&gt;
		Case Else&lt;br /&gt;
			$vResult = DllStructGetData($tDCB, $sElement)&lt;br /&gt;
			If @error Then Return SetError(@error+10, @ScriptLineNumber, 0)&lt;br /&gt;
			Return $vResult&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	$vResult = DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;)&lt;br /&gt;
	If @error Then Return SetError(@error+10, @ScriptLineNumber, 0)&lt;br /&gt;
	Return BitAND($bValid, BitShift($vResult, $iShift))&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommStateElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommTimeoutsElement&lt;br /&gt;
; Description ...: Retrieves one time-out parameter for an element of a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommTimeoutsElement(Const $tCommTimeouts, Const $sElement)&lt;br /&gt;
; Parameters ....: $tCommTimeouts       - [in] A COMMTIMEOUTS structure.&lt;br /&gt;
;                  $sElement            - [in] A element name of DCB structure.&lt;br /&gt;
; Return values .: Success - Data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommTimeouts, _CommAPI_SetCommTimeoutsElement, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363190(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommTimeoutsElement(Const $tCommTimeouts, Const $sElement)&lt;br /&gt;
	Local $vResult = 0&lt;br /&gt;
	$vResult = DllStructGetData($tCommTimeouts, $sElement)&lt;br /&gt;
	If @error Then Return SetError(@error+10, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommTimeoutsElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_IsOnCTS&lt;br /&gt;
; Description ...: The CTS (clear-to-send) signal is on.&lt;br /&gt;
; Syntax ........: _CommAPI_IsOnCTS(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_IsOnCTS(Const $hFile)&lt;br /&gt;
	Local $iModemStatus = _CommAPI_GetCommModemStatus($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	If BitAND($iModemStatus, $MS_CTS_ON) Then Return True&lt;br /&gt;
	Return False&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_IsOnCTS&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_IsOnDSR&lt;br /&gt;
; Description ...: The DSR (data-set-ready) signal is on.&lt;br /&gt;
; Syntax ........: _CommAPI_IsOnDSR(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_IsOnDSR(Const $hFile)&lt;br /&gt;
	Local $iModemStatus = _CommAPI_GetCommModemStatus($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	If BitAND($iModemStatus, $MS_DSR_ON) Then Return True&lt;br /&gt;
	Return False&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_IsOnDSR&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_IsOnRI&lt;br /&gt;
; Description ...: The RI (ring indicator) signal is on.&lt;br /&gt;
; Syntax ........: _CommAPI_IsOnRI(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_IsOnRI(Const $hFile)&lt;br /&gt;
	Local $iModemStatus = _CommAPI_GetCommModemStatus($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	If BitAND($iModemStatus, $MS_RING_ON) Then Return True&lt;br /&gt;
	Return False&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_IsOnRI&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_IsOnDCD&lt;br /&gt;
; Description ...: The DCD/CD/RLSD (Data Carrier Detect/Carrier Detect/receive-line-signal-detect) signal is on.&lt;br /&gt;
; Syntax ........: _CommAPI_IsOnDCD(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_IsOnDCD(Const $hFile)&lt;br /&gt;
	Local $iModemStatus = _CommAPI_GetCommModemStatus($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	If BitAND($iModemStatus, $MS_RLSD_ON) Then Return True&lt;br /&gt;
	Return False&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_IsOnDCD&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommStateElement&lt;br /&gt;
; Description ...: Set one control setting for an element of a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommStateElement(ByRef $tDCB, Const $sElement, Const $vValue)&lt;br /&gt;
; Parameters ....: $tDCB                - [in/out] A DCB structure.&lt;br /&gt;
;                  $sElement            - [in] A element name of DCB structure.&lt;br /&gt;
;                  $vValue              - [in] A new value for the element.&lt;br /&gt;
; Return values .: Success - Previous data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommState, _CommAPI_GetCommStateElement, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommStateElement(ByRef $tDCB, Const $sElement, Const $vValue)&lt;br /&gt;
	Local $vResult = 0&lt;br /&gt;
	Local $iShift = 0&lt;br /&gt;
	Local $bValid = 0x1&lt;br /&gt;
	Local $bMask = 0xFFFFFFFF&lt;br /&gt;
	Switch $sElement&lt;br /&gt;
		Case &amp;quot;fBinary&amp;quot;&lt;br /&gt;
			$bMask = 0xFFFFFFFE&lt;br /&gt;
		Case &amp;quot;fParity&amp;quot;&lt;br /&gt;
			$iShift = -1&lt;br /&gt;
			$bMask = 0xFFFFFFFD&lt;br /&gt;
		Case &amp;quot;fOutxCTSFlow&amp;quot;&lt;br /&gt;
			$iShift = -2&lt;br /&gt;
			$bMask = 0xFFFFFFFB&lt;br /&gt;
		Case &amp;quot;fOutxDSRFlow&amp;quot;&lt;br /&gt;
			$iShift = -3&lt;br /&gt;
			$bMask = 0xFFFFFFF7&lt;br /&gt;
		Case &amp;quot;fDTRControl&amp;quot;&lt;br /&gt;
			$iShift = -4&lt;br /&gt;
			$bValid = 0x3&lt;br /&gt;
			$bMask = 0xFFFFFFCF&lt;br /&gt;
		Case &amp;quot;fDsrSensitivity&amp;quot;&lt;br /&gt;
			$iShift = -6&lt;br /&gt;
			$bMask = 0xFFFFFFBF&lt;br /&gt;
		Case &amp;quot;fTXContinueOnXoff&amp;quot;&lt;br /&gt;
			$iShift = -7&lt;br /&gt;
			$bMask = 0xFFFFFF7F&lt;br /&gt;
		Case &amp;quot;fOutX&amp;quot;&lt;br /&gt;
			$iShift = -8&lt;br /&gt;
			$bMask = 0xFFFFFEFF&lt;br /&gt;
		Case &amp;quot;fInX&amp;quot;&lt;br /&gt;
			$iShift = -9&lt;br /&gt;
			$bMask = 0xFFFFFDFF&lt;br /&gt;
		Case &amp;quot;fErrorChar&amp;quot;&lt;br /&gt;
			$iShift = -10&lt;br /&gt;
			$bMask = 0xFFFFFBFF&lt;br /&gt;
		Case &amp;quot;fNull&amp;quot;&lt;br /&gt;
			$iShift = -11&lt;br /&gt;
			$bMask = 0xFFFFF7FF&lt;br /&gt;
		Case &amp;quot;fRTSControl&amp;quot;&lt;br /&gt;
			$iShift = -12&lt;br /&gt;
			$bValid = 0x3&lt;br /&gt;
			$bMask = 0xFFFFCFFF&lt;br /&gt;
		Case &amp;quot;fAbortOnError&amp;quot;&lt;br /&gt;
			$iShift = -14&lt;br /&gt;
			$bMask = 0xFFFFBFFF&lt;br /&gt;
		Case &amp;quot;Dymmy2&amp;quot;&lt;br /&gt;
			$iShift = -15&lt;br /&gt;
			$bValid = 0x1FFFF&lt;br /&gt;
			$bMask = 0x7FFF&lt;br /&gt;
		Case Else&lt;br /&gt;
			$vResult = DllStructSetData($tDCB, $sElement, $vValue)&lt;br /&gt;
			If @error Then Return SetError(@error+10, @ScriptLineNumber, 0)&lt;br /&gt;
			Return $vResult&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	$vResult = DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;)&lt;br /&gt;
	If @error Then Return SetError(@error+10, @ScriptLineNumber, 0)&lt;br /&gt;
	$vResult = BitXOR(BitShift(BitAND($vValue, $bValid), $iShift), BitAND($vResult, $bMask))&lt;br /&gt;
	$vResult = DllStructSetData($tDCB, &amp;quot;fBitFields&amp;quot;, $vResult)&lt;br /&gt;
	If @error Then Return SetError(@error+10, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommStateElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommTimeoutsElement&lt;br /&gt;
; Description ...: Sets one time-out parameter for an element off a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommTimeoutsElement(Byref $tCommTimeouts, Const $sElement, Const $vValue)&lt;br /&gt;
; Parameters ....: $tCommTimeouts       - [in/out] A COMMTIMEOUTS structure.&lt;br /&gt;
;                  $sElement            - [in] A element name of COMMTIMEOUTS structure.&lt;br /&gt;
;                  $vValue              - [in] A new value for the element.&lt;br /&gt;
; Return values .: Success - Previous data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 11 struct not a correct struct returned by DllStructCreate&lt;br /&gt;
;                            12 element value out of range&lt;br /&gt;
;                            13 index would be outside of the struct&lt;br /&gt;
;                            14 element data type is unknown&lt;br /&gt;
;                            15 index &amp;lt;= 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ChangeCommTimeoutsElement, _CommAPI_SetCommTimeouts, _CommAPI_GetCommTimeoutsElement, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363190(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommTimeoutsElement(ByRef $tCommTimeouts, Const $sElement, Const $vValue)&lt;br /&gt;
	Local $vResult = DllStructSetData($tCommTimeouts, $sElement, $vValue)&lt;br /&gt;
	If @error Then Return SetError(@error+10, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommTimeoutsElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetOnDTR&lt;br /&gt;
; Description ...: Sends or clears the DTR (data-terminal-ready) signal.&lt;br /&gt;
; Syntax ........: _CommAPI_SetOnDTR(Const $hFile, Const $iDTR)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iDTR                - [in] A boolean value: True  - Sends the DTR (data-terminal-ready) signal.&lt;br /&gt;
;                                                               False - Clears the DTR (data-terminal-ready) signal.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_EscapeCommFunction&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363254(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetOnDTR(Const $hFile, Const $iDTR)&lt;br /&gt;
	Local $iFunction = 0&lt;br /&gt;
	Switch StringUpper($iDTR)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;, String($CLRDTR)&lt;br /&gt;
			$iFunction = $CLRDTR&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;, String($SETDTR)&lt;br /&gt;
			$iFunction = $SETDTR&lt;br /&gt;
		Case Else&lt;br /&gt;
			Return False&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	_CommAPI_EscapeCommFunction($hFile, $iFunction)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetOnDTR&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetOnRTS&lt;br /&gt;
; Description ...: Sends or clears the RTS (request-to-send) signal.&lt;br /&gt;
; Syntax ........: _CommAPI_SetOnRTS(Const $hFile, Const $iRTS)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iRTS                - [in] A boolean value: True  - Sends the RTS (request-to-send) signal.&lt;br /&gt;
;                                                               False - Clears the RTS (request-to-send) signal.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_EscapeCommFunction&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363254(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetOnRTS(Const $hFile, Const $iRTS)&lt;br /&gt;
	Local $iFunction = 0&lt;br /&gt;
	Switch StringUpper($iRTS)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;, String($CLRRTS)&lt;br /&gt;
			$iFunction = $CLRRTS&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;, String($SETRTS)&lt;br /&gt;
			$iFunction = $SETRTS&lt;br /&gt;
		Case Else&lt;br /&gt;
			Return False&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	_CommAPI_EscapeCommFunction($hFile, $iFunction)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetOnRTS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI.au3&amp;diff=12336</id>
		<title>CommAPI.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI.au3&amp;diff=12336"/>
		<updated>2014-03-27T15:22:04Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: updated @error handling&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommAPI.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-03-27&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPIConstants.au3&amp;quot;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_BuildCommDCB&lt;br /&gt;
; Description ...: Fills a specified DCB structure with values specified in a device-control string.&lt;br /&gt;
; Syntax ........: _CommAPI_BuildCommDCB(Const $sMode, Byref $tDBC)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
;                  $tDBC                - [out] A DCB structure.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_BuildCommDCBAndTimeouts, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363143(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_BuildCommDCB(Const $sMode, ByRef $tDBC)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;BuildCommDCB&amp;quot;, &amp;quot;str&amp;quot;, $sMode, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDBC))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_BuildCommDCB&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_BuildCommDCBAndTimeouts&lt;br /&gt;
; Description ...: Translates a device-definition string into appropriate device-control block codes and places them into a device control block.&lt;br /&gt;
;                  The function can also set up time-out values for a device.&lt;br /&gt;
; Syntax ........: _CommAPI_BuildCommDCBAndTimeouts(Const $sMode, Byref $tDBC, Byref $tCommTimeouts)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
;                  $tDBC                - [out] A DCB structure.&lt;br /&gt;
;                  $tCommTimeouts       - [out] A COMMTIMEOUTS structure.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
;                           -1 function fails (To get extended error information, call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage)&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_BuildCommDCB, $tagDCB, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363145(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_BuildCommDCBAndTimeouts(Const $sMode, ByRef $tDBC, ByRef $tCommTimeouts)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;BuildCommDCBAndTimeouts&amp;quot;, &amp;quot;str&amp;quot;, $sMode, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDBC), &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(-1, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_BuildCommDCBAndTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClearCommBreak&lt;br /&gt;
; Description ...: Restores character transmission for a specified communications device and places the transmission line in a nonbreak state.&lt;br /&gt;
; Syntax ........: _CommAPI_ClearCommBreak(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ClearCommError&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363179(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClearCommBreak(Const $hFile)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;ClearCommBreak&amp;quot;, &amp;quot;handle&amp;quot;, $hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClearCommBreak&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClearCommError&lt;br /&gt;
; Description ...: Retrieves information about a communications error and reports the current status of a communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ClearCommError(Const $hFile[, $tComStat = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tComStat            - [out] A COMSTAT structure in which the device&#039;s status information is returned.&lt;br /&gt;
; Return values .: Success - A mask indicating the type of error.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ClearCommBreak, $tagCOMSTAT&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363180(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClearCommError(Const $hFile, $tComStat = 0)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;ClearCommError&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tComStat))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClearCommError&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_EscapeCommFunction&lt;br /&gt;
; Description ...: Directs the specified communications device to perform an extended function.&lt;br /&gt;
; Syntax ........: _CommAPI_EscapeCommFunction(Const $hFile, Const $iFunction)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iFunction           - [in] The extended function to be performed.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetOnDTR, _CommAPI_SetOnRTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363254(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_EscapeCommFunction(Const $hFile, Const $iFunction)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;EscapeCommFunction&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iFunction)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_EscapeCommFunction&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommMask&lt;br /&gt;
; Description ...: Retrieves the value of the event mask for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommMask(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - A mask of events that are currently enabled.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363257(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommMask(Const $hFile)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommMask&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommMask&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Description ...: Retrieves the modem control-register values.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommModemStatus(Const $hFile, Byref $pModemStatus)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - The current state of the modem control-register values.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_IsOnCTS, _CommAPI_IsOnDSR, _CommAPI_IsOnRI, _CommAPI_IsOnDCD, _CommAPI_WaitCommEvent&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommModemStatus(Const $hFile)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommModemStatus&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommModemStatus&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommProperties&lt;br /&gt;
; Description ...: Retrieves information about the communications properties for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommProperties(Const $hFile[, $tCOMMPROP = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCOMMPROP           - [out] A COMMPROP structure in which the communications properties information is returned.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363259(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommProperties(Const $hFile, $tCOMMPROP = 0)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommProperties&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCOMMPROP))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommProperties&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommState&lt;br /&gt;
; Description ...: Retrieves the current control settings for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommState(Const $hFile, $tDCB = 0)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tDCB                - [out] A DCB structure that receives the control settings information.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommState, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363260(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommState(Const $hFile, $tDCB = 0)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommState&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDCB))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommState&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommTimeouts&lt;br /&gt;
; Description ...: Retrieves the time-out parameters for all read and write operations on a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommTimeouts(Const $hFile, $tCommTimeouts = 0)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCommTimeouts       - [out] A COMMTIMEOUTS structure in which the time-out information is returned.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommTimeouts, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363261(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommTimeouts(Const $hFile, $tCommTimeouts = 0)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommTimeouts&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_PurgeComm&lt;br /&gt;
; Description ...: Discards all characters from the output or input buffer of a specified communications resource.&lt;br /&gt;
;                  It can also terminate pending read or write operations on the resource.&lt;br /&gt;
; Syntax ........: _CommAPI_PurgeComm(Const $hFile[, $iFlags = $PURGE_ALL])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iFlags              - [in] An integer value.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363428(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_PurgeComm(Const $hFile, Const $iFlags = $PURGE_ALL)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;PurgeComm&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iFlags)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_PurgeComm&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommBreak&lt;br /&gt;
; Description ...: Suspends character transmission for a specified communications device and places the transmission line in a break state until the ClearCommBreak function is called.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommBreak(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363433(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommBreak(Const $hFile)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommBreak&amp;quot;, &amp;quot;handle&amp;quot;, $hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommBreak&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommMask&lt;br /&gt;
; Description ...: Specifies a set of events to be monitored for a communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommMask(Const $hFile, Const $iEventMask)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iEventMask          - [in] The events to be enabled. A value of zero disables all events.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363435(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommMask(Const $hFile, Const $iEventMask)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommMask&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iEventMask)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommMask&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommState&lt;br /&gt;
; Description ...: Configures a communications device according to the specifications in a device-control block.&lt;br /&gt;
;                  The function reinitializes all hardware and control settings, but it does not empty output or input queues.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommState(Const $hFile, Const $tDCB)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tDCB                - [in] A DCB structure that contains the configuration information for the specified communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommState, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363436(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommState(Const $hFile, Const $tDCB)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommState&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDCB))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommState&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommTimeouts&lt;br /&gt;
; Description ...: Sets the time-out parameters for all read and write operations on a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommTimeouts(Const $hFile, Const $tCommTimeouts)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCommTimeouts       - [in] A COMMTIMEOUTS structure that contains the new time-out values.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommTimeouts, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363437(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommTimeouts(Const $hFile, Const $tCommTimeouts)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommTimeouts&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetupComm&lt;br /&gt;
; Description ...: Initializes the communications parameters for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetupComm(Const $hFile, Const $iInQueue, Const $iOutQueue)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iInQueue            - [in] The recommended size of the device&#039;s internal input buffer, in bytes.&lt;br /&gt;
;                  $iOutQueue           - [in] The recommended size of the device&#039;s internal output buffer, in bytes.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363439(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetupComm(Const $hFile, Const $iInQueue, Const $iOutQueue)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetupComm&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iInQueue, &amp;quot;dword&amp;quot;, $iOutQueue)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetupComm&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitCommChar&lt;br /&gt;
; Description ...: Transmits a specified character ahead of any pending data in the output buffer of the specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitCommChar(Const $hFile, Const $cChar)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sChar               - [in] The character to be transmitted.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363473(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitCommChar(Const $hFile, Const $cChar)&lt;br /&gt;
	Local $tChar = DllStructCreate(&amp;quot;char&amp;quot;)&lt;br /&gt;
	DllStructSetData($tChar, 1, $cChar)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;TransmitCommChar&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;char&amp;quot;, $tChar)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_TransmitCommChar&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_WaitCommEvent&lt;br /&gt;
; Description ...: Waits for an event to occur for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_WaitCommEvent(Const $hFile [, Const $tOverlapped = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tOverlapped         - [in] An OVERLAPPED structure.&lt;br /&gt;
; Return values .: Success - A mask indicating the type of event that occurred.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
;                  @error  - 1 unable to use the DLL file&lt;br /&gt;
;                            2 unknown &amp;quot;return type&amp;quot;&lt;br /&gt;
;                            3 &amp;quot;function&amp;quot; not found in the DLL file&lt;br /&gt;
;                            4 bad number of parameters&lt;br /&gt;
;                            5 bad parameter&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_EscapeCommFunction, _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363479(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_WaitCommEvent(Const $hFile, Const $tOverlapped = 0)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;WaitCommEvent&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tOverlapped))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_WaitCommEvent&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI_Examples&amp;diff=12335</id>
		<title>CommAPI Examples</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI_Examples&amp;diff=12335"/>
		<updated>2014-03-27T15:17:30Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: update existing examples and add new examples&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Samples]]&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This site shows you some examples for [[CommAPI]].&lt;br /&gt;
You will also need the following snippet for all examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;CommInterface.au3&amp;quot;&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
Main()&lt;br /&gt;
&lt;br /&gt;
Func Main()&lt;br /&gt;
	Local $sResult = Example()&lt;br /&gt;
	Switch @error&lt;br /&gt;
		Case 0&lt;br /&gt;
			MsgBox(64, &amp;quot;Result&amp;quot;, $sResult)&lt;br /&gt;
		Case -1&lt;br /&gt;
			MsgBox(32, &amp;quot;Error&amp;quot;, _WinAPI_GetLastErrorMessage())&lt;br /&gt;
		Case -2&lt;br /&gt;
			MsgBox(32, &amp;quot;Timeout&amp;quot;, $sResult)&lt;br /&gt;
		Case Else&lt;br /&gt;
			MsgBox(32, &amp;quot;Error&amp;quot;, &amp;quot;Error &amp;quot; &amp;amp; @error &amp;amp; &amp;quot; in line &amp;quot; &amp;amp; @extended)&lt;br /&gt;
	EndSwitch&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First example ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local Const $iPort = 1&lt;br /&gt;
	Local Const $iBaud = 9600&lt;br /&gt;
	Local Const $iParity = 0&lt;br /&gt;
	Local Const $iByteSize = 8&lt;br /&gt;
	Local Const $iStopBits = 1&lt;br /&gt;
	Local Const $sCommand = &amp;quot;Command&amp;quot; &amp;amp; @CRLF&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenCOMPort($iPort, $iBaud, $iParity, $iByteSize, $iStopBits)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitData($hFile, $sCommand)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveData($hFile, 5000)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INI file==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local Const $sFileINI = @ScriptDir &amp;amp; &amp;quot;\Example.ini&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	Local $sMode = _CommAPI_CreateModeString( _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;SerialPort&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;BaudRate&amp;quot;, 9600), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;Parity&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;ByteSize&amp;quot;, 8), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;StopBits&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;XON&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;DSR&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;CTS&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;DTR&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;RTS&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;IDSR&amp;quot;, 0))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($sMode)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitData($hFile, IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;Command&amp;quot;, &amp;quot;Command&amp;quot; &amp;amp; @CRLF))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveData($hFile, IniRead($sFileINI, &amp;quot;Timeout&amp;quot;, &amp;quot;IDSR&amp;quot;, 5000))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command Line ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	If $CmdLine[0] &amp;lt;&amp;gt; 2 Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Syntax&amp;quot;, @ScriptName &amp;amp; &#039; &amp;quot;ModeString&amp;quot; &amp;quot;Command&amp;quot;&#039;)&lt;br /&gt;
		Exit&lt;br /&gt;
	EndIf&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($CmdLine[1])&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitData($hFile, $CmdLine[2])&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveData($hFile, 5000)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;winbatch&amp;quot;&amp;gt;&lt;br /&gt;
@echo off&lt;br /&gt;
cls&lt;br /&gt;
chcp 1252&amp;gt;nul&lt;br /&gt;
cd /d &amp;quot;%~dp0&amp;quot;&lt;br /&gt;
start Example.exe &amp;quot;COM1: BAUD=9600 PARITY=N DATA=8 STOP=1 XON=OFF ODSR=OFF OCTS=ON DTR=ON RTS=ON IDSR=OFF&amp;quot; &amp;quot;Command&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Separator ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local $hFile = _CommAPI_OpenCOMPort(1, 9600, 0, 8, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveLine($hFile, &amp;quot;&amp;lt;CR&amp;gt;&amp;quot;, 5000)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Slow Devices ==&lt;br /&gt;
For some slow devices the default timeout is too small of one millisecond.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local $hFile = _CommAPI_OpenCOMPort(1, 9600, 0, 8, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ChangeCommTimeoutsElement($hFile, &amp;quot;ReadTotalTimeoutMultiplier&amp;quot;, 100)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveData($hFile, 5000)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, $sResult)&lt;br /&gt;
&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12334</id>
		<title>CommAPI</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12334"/>
		<updated>2014-03-27T12:06:48Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: /* Changelog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CommAPI translates the communications functions of Windows API to AutoIt functions.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
=== Features ===&lt;br /&gt;
* No need to install DLL&#039;s&lt;br /&gt;
* Using Windows API calls (kernel32.dll)&lt;br /&gt;
* Possibility of serial communication (serial port, COM port, RS-232)&lt;br /&gt;
* Possibility of parallel communication (parallel port, LPT port)&lt;br /&gt;
* No use of global variables&lt;br /&gt;
* Uniform namespace _CommAPI_XXX&lt;br /&gt;
* Modular organization into files&lt;br /&gt;
* A lot of additional utility and helper functions&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
* [[CommAPIConstants.au3]]&lt;br /&gt;
* [[CommAPI.au3]]&lt;br /&gt;
* [[CommAPIHelper.au3]]&lt;br /&gt;
* [[CommUtilities.au3]]&lt;br /&gt;
* [[CommInterface.au3]]&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
[[CommAPI Examples]] shows you some examples. Mayby you could find more examples in [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/?p=1126366 forum].&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
=== History ===&lt;br /&gt;
* 2008-09-12 Creation of cfx.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/#entry578111 (V1.0)]&lt;br /&gt;
* 2011-02-18 Conversation of cfx.au3 into cfxUDF.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry872154 (V2.0)]&lt;br /&gt;
* 2011-02-28 Update V2.0to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry874547 V2.1]&lt;br /&gt;
* 2011-04-27 Update V2.1 to [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=217993#post217993 V2.2] (german forum)&lt;br /&gt;
* 2013-07-10 Modify V2.1 to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry1094288 V2.1mod]&lt;br /&gt;
* 2013-10-24 Creation of [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ CommAPI.au3]&lt;br /&gt;
&lt;br /&gt;
=== Changelog ===&lt;br /&gt;
; 2014-01-23&lt;br /&gt;
: Small update of method _CommAPI_CreateModeString&lt;br /&gt;
; 2014-02-03&lt;br /&gt;
: Change timeout handling (Attention: not backward compatible)&lt;br /&gt;
: Small update of method _CommAPI_PurgeComm&lt;br /&gt;
; 2014-03-07	&lt;br /&gt;
: Rename CommAPIStructures.au3 to CommAPIConstants.au3&lt;br /&gt;
: Replace hex values with Constants&lt;br /&gt;
; 2014-03-27	&lt;br /&gt;
: Update of call _WinAPI_CreateFile&lt;br /&gt;
&lt;br /&gt;
=== Roadmap ===&lt;br /&gt;
There is no roadmap in the moment. Feel free to implement the last five remaining API calls, enhance the scripts or to fix bugs.&lt;br /&gt;
&lt;br /&gt;
=== Support ===&lt;br /&gt;
There is no official support. Try to get help from community in the official forum. [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ Here you can find the main thread].&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx MSDN Library of communications functions]&lt;br /&gt;
* [http://www.hpcc.ecs.soton.ac.uk/software/Win32API.Txt WIN32API.TXT]&lt;br /&gt;
* cfxUDF.au3 (see section above)&lt;br /&gt;
* [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=198669#post198669 GetCOMPorts] (german forum)&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/19713-problem-with-struct/#entry136466 ParseCommState]&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== Implemented API functions ===&lt;br /&gt;
* BuildCommDCB&lt;br /&gt;
* BuildCommDCBAndTimeouts&lt;br /&gt;
* ClearCommBreak&lt;br /&gt;
* ClearCommError&lt;br /&gt;
* EscapeCommFunction&lt;br /&gt;
* GetCommMask&lt;br /&gt;
* GetCommModemStatus&lt;br /&gt;
* GetCommProperties&lt;br /&gt;
* GetCommState&lt;br /&gt;
* GetCommTimeouts&lt;br /&gt;
* PurgeComm&lt;br /&gt;
* SetCommBreak&lt;br /&gt;
* SetCommMask&lt;br /&gt;
* SetCommState&lt;br /&gt;
* SetCommTimeouts&lt;br /&gt;
* SetupComm&lt;br /&gt;
* TransmitCommChar&lt;br /&gt;
* WaitCommEvent&lt;br /&gt;
&lt;br /&gt;
=== Unimplemented API functions ===&lt;br /&gt;
* CommConfigDialog&lt;br /&gt;
* GetCommConfig&lt;br /&gt;
* GetDefaultCommConfig&lt;br /&gt;
* SetCommConfig&lt;br /&gt;
* SetDefaultCommConfig&lt;br /&gt;
&lt;br /&gt;
=== API helper functions ===&lt;br /&gt;
* ChangeCommStateElement&lt;br /&gt;
* ChangeCommTimeoutsElement&lt;br /&gt;
* GetCommStateElement&lt;br /&gt;
* GetCommTimeoutsElement&lt;br /&gt;
* IsOnCTS&lt;br /&gt;
* IsOnDCD&lt;br /&gt;
* IsOnDSR&lt;br /&gt;
* IsOnRI&lt;br /&gt;
* SetCommStateElement&lt;br /&gt;
* SetCommTimeoutsElement&lt;br /&gt;
* SetOnDTR&lt;br /&gt;
* SetOnRTS&lt;br /&gt;
&lt;br /&gt;
=== Utility functions ===&lt;br /&gt;
* CommStateToString&lt;br /&gt;
* CommTimeoutsToString&lt;br /&gt;
* CreateModeString&lt;br /&gt;
* GetCOMPorts&lt;br /&gt;
&lt;br /&gt;
=== Interface functions ===&lt;br /&gt;
* ClosePort&lt;br /&gt;
* OpenCOMPort&lt;br /&gt;
* OpenPort&lt;br /&gt;
* ReceiveData&lt;br /&gt;
* TransmitData&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12333</id>
		<title>CommInterface.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12333"/>
		<updated>2014-03-27T08:57:09Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: Update call of _WinAPI_CreateFile&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommInterface.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-03-27&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error in CommAPI.au3.&lt;br /&gt;
;                  Everytime @extended is set, you can call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPIHelper.au3&amp;quot;&lt;br /&gt;
#include &amp;quot;CommUtilities.au3&amp;quot;&lt;br /&gt;
#include &amp;lt;WinAPI.au3&amp;gt;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClosePort&lt;br /&gt;
; Description ...: CLoses a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
	Local $fResult = _WinAPI_CloseHandle($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, 0, False)&lt;br /&gt;
	Return $fResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClosePort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenCOMPort&lt;br /&gt;
; Description ...: Opens a COM Port.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenCOMPort(Const $iPort[, $iBaudRate = Default[, $iParity = Default[, $iByteSize = Default[,&lt;br /&gt;
;                  $iStopBits = Default]]]])&lt;br /&gt;
; Parameters ....: $iPort               - [in] A port number.&lt;br /&gt;
;                  $iBaudRate           - [in] The baud rate at which the communications device operates.&lt;br /&gt;
;                  $iParity             - [in] The parity scheme to be used.&lt;br /&gt;
;                  $iByteSize           - [in] Specifies the number of data bits in a character.&lt;br /&gt;
;                  $iStopBits           - [in] Specifies the number of stop bits that define the end of a character: 1, 1.5, or 2.&lt;br /&gt;
; Return values .: Success - The open handle to a specified communications device.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort, _CommAPI_ClosePort, _CommAPI_CreateModeString&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenCOMPort(Const $iPort, Const $iBaudRate = Default, Const $iParity = Default, Const $iByteSize = Default, Const $iStopBits = Default)&lt;br /&gt;
	Local $sMode = _CommAPI_CreateModeString($iPort, $iBaudRate, $iParity, $iByteSize, $iStopBits)&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($sMode)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenCOMPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenPort&lt;br /&gt;
; Description ...: Opens a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
; Return values .: Success - The open handle to a specified communications device.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenCOMPort, _CommAPI_ClosePort, _CommAPI_SetCommState&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
	Local $sFileName = &amp;quot;\\.\&amp;quot; &amp;amp; StringLeft($sMode, StringInStr($sMode, &amp;quot;:&amp;quot;) - 1)&lt;br /&gt;
	Local $hFile = _WinAPI_CreateFile($sFileName, 3, 6)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If $hFile &amp;lt;= 0 Then Return SetError(-1, @ScriptLineNumber, 0)&lt;br /&gt;
&lt;br /&gt;
	Local $tDCB = DllStructCreate($tagDCB)&lt;br /&gt;
	Local $tCommTimeouts = DllStructCreate($tagCOMMTIMEOUTS)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_BuildCommDCB($sMode, $tDCB)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;ReadTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;WriteTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	If Not _CommAPI_SetCommState($hFile, $tDCB) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	If Not _CommAPI_SetCommTimeouts($hFile, $tCommTimeouts) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveData&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveData(Const $hFile[, $iTimeout = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
; Return values .: Success - Received string&lt;br /&gt;
;                  Failure - Empty string&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......: If the result contains Chr(0), you should convert the result with function Binary().&lt;br /&gt;
; Related .......: _CommAPI_TransmitData&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveData(Const $hFile, Const $iTimeout = 0)&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;char&amp;quot;)&lt;br /&gt;
	Local $hTimer = TimerInit()&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	Do&lt;br /&gt;
		_WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), 1, $iWritten)&lt;br /&gt;
		If @error Then Return SetError(@error, 0, $sResult)&lt;br /&gt;
		If $iWritten Then $sResult &amp;amp;= DllStructGetData($tBuffer, 1)&lt;br /&gt;
	Until Not $iWritten And ( $sResult Or $iTimeout &amp;lt; TimerDiff($hTimer) )&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ReceiveData&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitData&lt;br /&gt;
; Description ...: Transmits data (TxD/TX/TD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sData               - [in] A string value to transmit.&lt;br /&gt;
; Return values .: Success - The number of bytes written.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveData&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;byte[&amp;quot; &amp;amp; StringLen($sData) &amp;amp; &amp;quot;]&amp;quot;)&lt;br /&gt;
	DllStructSetData($tBuffer, 1, $sData)&lt;br /&gt;
	If @error Then Return SetError(@error)&lt;br /&gt;
	_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), StringLen($sData), $iWritten)&lt;br /&gt;
	If @error Then Return SetError(@error)&lt;br /&gt;
	Return $iWritten&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_TransmitData&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPIConstants.au3&amp;diff=12323</id>
		<title>CommAPIConstants.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPIConstants.au3&amp;diff=12323"/>
		<updated>2014-03-10T08:44:38Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: #INDEX#&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommAPIConstants.au3&lt;br /&gt;
; Title .........: Communications structures and constants of Windows API&lt;br /&gt;
; Description ...: Communications structures of Windows API have been translated to AutoIt structures.&lt;br /&gt;
; Version Date ..: 2014-03-07&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363199(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global Const $tagCOMMPROP = _&lt;br /&gt;
		&amp;quot;WORD  wPacketLength;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  wPacketVersion;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwServiceMask;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwReserved1;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxTxQueue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxRxQueue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxBaud;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwProvSubType;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwProvCapabilities;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSettableParams;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSettableBaud;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  wSettableData;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  wSettableStopParity;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwCurrentTxQueue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwCurrentRxQueue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwProvSpec1;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwProvSpec2;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WCHAR wcProvChar[1];&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Global Const $tagCOMMTIMEOUTS = _&lt;br /&gt;
		&amp;quot;DWORD ReadIntervalTimeout;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD ReadTotalTimeoutMultiplier;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD ReadTotalTimeoutConstant;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD WriteTotalTimeoutMultiplier;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD WriteTotalTimeoutConstant;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cs&lt;br /&gt;
	http://msdn.microsoft.com/en-us/library/aa363200(v=vs.85).aspx&lt;br /&gt;
	The eight actual COMSTAT bit-sized data fields within the four bytes of fBitFields can be manipulated by bitwise logical And/Or operations.&lt;br /&gt;
	FieldName           Bits    Description&lt;br /&gt;
	-----------------   -----   ---------------------------&lt;br /&gt;
	fCtsHold             1      Tx waiting for CTS signal&lt;br /&gt;
	fDsrHold             2      Tx waiting for DSR signal&lt;br /&gt;
	fRlsdHold            3      Tx waiting for RLSD signal&lt;br /&gt;
	fXoffHold            4      Tx waiting, XOFF char rec&#039;d&lt;br /&gt;
	fXoffSent            5      Tx waiting, XOFF char sent&lt;br /&gt;
	fEof                 6      EOF character sent&lt;br /&gt;
	fTxim                7      character waiting for Tx&lt;br /&gt;
	fReserved            8-32   reserved (25 bits)&lt;br /&gt;
#ce&lt;br /&gt;
&lt;br /&gt;
Global Const $tagCOMSTAT = _&lt;br /&gt;
		&amp;quot;DWORD fBitFields;&amp;quot; &amp;amp; _ ; see comment above&lt;br /&gt;
		&amp;quot;DWORD cbInQue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD cbOutQue;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cs&lt;br /&gt;
	http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
	The fourteen actual DCB bit-sized data fields within the four bytes of fBitFields can be manipulated by bitwise logical And/Or operations.&lt;br /&gt;
	FieldName           Bits    Description&lt;br /&gt;
	-----------------   -----   ---------------------------&lt;br /&gt;
	fBinary              1      binary mode, no EOF check&lt;br /&gt;
	fParity              2      enable parity checking&lt;br /&gt;
	fOutxCtsFlow         3      CTS output flow control&lt;br /&gt;
	fOutxDsrFlow         4      DSR output flow control&lt;br /&gt;
	fDtrControl          5-6    DTR flow control type&lt;br /&gt;
	fDsrSensitivity      7      DSR sensitivity&lt;br /&gt;
	fTXContinueOnXoff    8      XOFF continues Tx&lt;br /&gt;
	fOutX                9      XON/XOFF out flow control&lt;br /&gt;
	fInX                10      XON/XOFF in flow control&lt;br /&gt;
	fErrorCHAR          11      enable error replacement&lt;br /&gt;
	fNull               12      enable null stripping&lt;br /&gt;
	fRtsControl         13-14   RTS flow control&lt;br /&gt;
	fAbortOnError       15      abort reads/writes on error&lt;br /&gt;
	fDummy2             16-32   reserved (17 bits)&lt;br /&gt;
#ce&lt;br /&gt;
&lt;br /&gt;
Global Const $tagDCB = _&lt;br /&gt;
		&amp;quot;DWORD DCBlength;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD BaudRate;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD fBitFields;&amp;quot; &amp;amp; _ ; see comment above&lt;br /&gt;
		&amp;quot;WORD  wReserved;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  XonLim;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  XoffLim;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  ByteSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  Parity;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  StopBits;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  XonChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  XoffChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  ErrorChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  EofChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  EvtChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  wReserved1;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Global Const $tagMODEMDEVCAPS = _&lt;br /&gt;
		&amp;quot;DWORD dwActualSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwRequiredSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDevSpecificOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDevSpecificSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemProviderVersion;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemManufacturerOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemManufacturerSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemModelOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemModelSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemVersionOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemVersionSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDialOptions;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwCallSetupFailTimer;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwInactivityTimeout;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSpeakerVolume;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSpeakerMode;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemOptions;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxDTERate;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxDCERate;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  abVariablePortion[1];&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Global Const $tagMODEMSETTINGS = _&lt;br /&gt;
		&amp;quot;DWORD dwActualSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwRequiredSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDevSpecificOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDevSpecificSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwCallSetupFailTimer;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwInactivityTimeout;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSpeakerVolume;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSpeakerMode;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwPreferredModemOptions;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwNegotiatedModemOptions;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwNegotiatedDCERate;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  abVariablePortion[1];&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global Const $SETXOFF = 1&lt;br /&gt;
Global Const $SETXON = 2&lt;br /&gt;
Global Const $SETRTS = 3&lt;br /&gt;
Global Const $CLRRTS = 4&lt;br /&gt;
Global Const $SETDTR = 5&lt;br /&gt;
Global Const $CLRDTR = 6&lt;br /&gt;
Global Const $SETBREAK = 8&lt;br /&gt;
Global Const $CLRBREAK = 9&lt;br /&gt;
&lt;br /&gt;
Global Const $CE_RXOVER = 0x0001&lt;br /&gt;
Global Const $CE_OVERRUN = 0x0002&lt;br /&gt;
Global Const $CE_RXPARITY = 0x0004&lt;br /&gt;
Global Const $CE_FRAME = 0x0008&lt;br /&gt;
Global Const $CE_BREAK = 0x0010&lt;br /&gt;
&lt;br /&gt;
Global Const $EV_RXCHAR = 0x0001&lt;br /&gt;
Global Const $EV_RXFLAG = 0x0002&lt;br /&gt;
Global Const $EV_TXEMPTY = 0x0004&lt;br /&gt;
Global Const $EV_CTS = 0x0008&lt;br /&gt;
Global Const $EV_DSR = 0x0010&lt;br /&gt;
Global Const $EV_RLSD = 0x0020&lt;br /&gt;
Global Const $EV_BREAK = 0x0040&lt;br /&gt;
Global Const $EV_ERR = 0x0080&lt;br /&gt;
Global Const $EV_RING = 0x0100&lt;br /&gt;
Global Const $EV_PERR = 0x0200&lt;br /&gt;
Global Const $EV_RX80FULL = 0x0400&lt;br /&gt;
Global Const $EV_EVENT1 = 0x0800&lt;br /&gt;
Global Const $EV_EVENT2 = 0x1000&lt;br /&gt;
&lt;br /&gt;
Global Const $MS_CTS_ON = 0x0010&lt;br /&gt;
Global Const $MS_DSR_ON = 0x0020&lt;br /&gt;
Global Const $MS_RING_ON = 0x0040&lt;br /&gt;
Global Const $MS_RLSD_ON = 0x0080&lt;br /&gt;
&lt;br /&gt;
Global Const $PURGE_TXABORT = 0x0001&lt;br /&gt;
Global Const $PURGE_RXABORT = 0x0002&lt;br /&gt;
Global Const $PURGE_TXCLEAR = 0x0004&lt;br /&gt;
Global Const $PURGE_RXCLEAR = 0x0008&lt;br /&gt;
Global Const $PURGE_ALL = 0x000F&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12322</id>
		<title>CommAPI</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12322"/>
		<updated>2014-03-07T10:02:33Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: /* Changelog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CommAPI translates the communications functions of Windows API to AutoIt functions.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
=== Features ===&lt;br /&gt;
* No need to install DLL&#039;s&lt;br /&gt;
* Using Windows API calls (kernel32.dll)&lt;br /&gt;
* Possibility of serial communication (serial port, COM port, RS-232)&lt;br /&gt;
* Possibility of parallel communication (parallel port, LPT port)&lt;br /&gt;
* No use of global variables&lt;br /&gt;
* Uniform namespace _CommAPI_XXX&lt;br /&gt;
* Modular organization into files&lt;br /&gt;
* A lot of additional utility and helper functions&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
* [[CommAPIConstants.au3]]&lt;br /&gt;
* [[CommAPI.au3]]&lt;br /&gt;
* [[CommAPIHelper.au3]]&lt;br /&gt;
* [[CommUtilities.au3]]&lt;br /&gt;
* [[CommInterface.au3]]&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
[[CommAPI Examples]] shows you some examples. Mayby you could find more examples in [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/?p=1126366 forum].&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
=== History ===&lt;br /&gt;
* 2008-09-12 Creation of cfx.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/#entry578111 (V1.0)]&lt;br /&gt;
* 2011-02-18 Conversation of cfx.au3 into cfxUDF.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry872154 (V2.0)]&lt;br /&gt;
* 2011-02-28 Update V2.0to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry874547 V2.1]&lt;br /&gt;
* 2011-04-27 Update V2.1 to [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=217993#post217993 V2.2] (german forum)&lt;br /&gt;
* 2013-07-10 Modify V2.1 to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry1094288 V2.1mod]&lt;br /&gt;
* 2013-10-24 Creation of [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ CommAPI.au3]&lt;br /&gt;
&lt;br /&gt;
=== Changelog ===&lt;br /&gt;
; 2014-01-23&lt;br /&gt;
: Small update of method _CommAPI_CreateModeString&lt;br /&gt;
; 2014-02-03&lt;br /&gt;
: Change timeout handling (Attention: not backward compatible)&lt;br /&gt;
: Small update of method _CommAPI_PurgeComm&lt;br /&gt;
; 2014-03-07	&lt;br /&gt;
: Rename CommAPIStructures.au3 to CommAPIConstants.au3&lt;br /&gt;
: Replace hex values with Constants&lt;br /&gt;
&lt;br /&gt;
=== Roadmap ===&lt;br /&gt;
There is no roadmap in the moment. Feel free to implement the last five remaining API calls, enhance the scripts or to fix bugs.&lt;br /&gt;
&lt;br /&gt;
=== Support ===&lt;br /&gt;
There is no official support. Try to get help from community in the official forum. [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ Here you can find the main thread].&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx MSDN Library of communications functions]&lt;br /&gt;
* [http://www.hpcc.ecs.soton.ac.uk/software/Win32API.Txt WIN32API.TXT]&lt;br /&gt;
* cfxUDF.au3 (see section above)&lt;br /&gt;
* [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=198669#post198669 GetCOMPorts] (german forum)&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/19713-problem-with-struct/#entry136466 ParseCommState]&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== Implemented API functions ===&lt;br /&gt;
* BuildCommDCB&lt;br /&gt;
* BuildCommDCBAndTimeouts&lt;br /&gt;
* ClearCommBreak&lt;br /&gt;
* ClearCommError&lt;br /&gt;
* EscapeCommFunction&lt;br /&gt;
* GetCommMask&lt;br /&gt;
* GetCommModemStatus&lt;br /&gt;
* GetCommProperties&lt;br /&gt;
* GetCommState&lt;br /&gt;
* GetCommTimeouts&lt;br /&gt;
* PurgeComm&lt;br /&gt;
* SetCommBreak&lt;br /&gt;
* SetCommMask&lt;br /&gt;
* SetCommState&lt;br /&gt;
* SetCommTimeouts&lt;br /&gt;
* SetupComm&lt;br /&gt;
* TransmitCommChar&lt;br /&gt;
* WaitCommEvent&lt;br /&gt;
&lt;br /&gt;
=== Unimplemented API functions ===&lt;br /&gt;
* CommConfigDialog&lt;br /&gt;
* GetCommConfig&lt;br /&gt;
* GetDefaultCommConfig&lt;br /&gt;
* SetCommConfig&lt;br /&gt;
* SetDefaultCommConfig&lt;br /&gt;
&lt;br /&gt;
=== API helper functions ===&lt;br /&gt;
* ChangeCommStateElement&lt;br /&gt;
* ChangeCommTimeoutsElement&lt;br /&gt;
* GetCommStateElement&lt;br /&gt;
* GetCommTimeoutsElement&lt;br /&gt;
* IsOnCTS&lt;br /&gt;
* IsOnDCD&lt;br /&gt;
* IsOnDSR&lt;br /&gt;
* IsOnRI&lt;br /&gt;
* SetCommStateElement&lt;br /&gt;
* SetCommTimeoutsElement&lt;br /&gt;
* SetOnDTR&lt;br /&gt;
* SetOnRTS&lt;br /&gt;
&lt;br /&gt;
=== Utility functions ===&lt;br /&gt;
* CommStateToString&lt;br /&gt;
* CommTimeoutsToString&lt;br /&gt;
* CreateModeString&lt;br /&gt;
* GetCOMPorts&lt;br /&gt;
&lt;br /&gt;
=== Interface functions ===&lt;br /&gt;
* ClosePort&lt;br /&gt;
* OpenCOMPort&lt;br /&gt;
* OpenPort&lt;br /&gt;
* ReceiveData&lt;br /&gt;
* TransmitData&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12321</id>
		<title>CommInterface.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommInterface.au3&amp;diff=12321"/>
		<updated>2014-03-07T10:01:19Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: Replace hex values with Constants&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommInterface.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-03-07&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error in CommAPI.au3.&lt;br /&gt;
;                  Everytime @extended is set, you can call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPIHelper.au3&amp;quot;&lt;br /&gt;
#include &amp;quot;CommUtilities.au3&amp;quot;&lt;br /&gt;
#include &amp;lt;WinAPI.au3&amp;gt;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClosePort&lt;br /&gt;
; Description ...: CLoses a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClosePort(Const $hFile)&lt;br /&gt;
	Local $fResult = _WinAPI_CloseHandle($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, 0, False)&lt;br /&gt;
	Return $fResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClosePort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenCOMPort&lt;br /&gt;
; Description ...: Opens a COM Port.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenCOMPort(Const $iPort[, $iBaudRate = Default[, $iParity = Default[, $iByteSize = Default[,&lt;br /&gt;
;                  $iStopBits = Default]]]])&lt;br /&gt;
; Parameters ....: $iPort               - [in] A port number.&lt;br /&gt;
;                  $iBaudRate           - [in] The baud rate at which the communications device operates.&lt;br /&gt;
;                  $iParity             - [in] The parity scheme to be used.&lt;br /&gt;
;                  $iByteSize           - [in] Specifies the number of data bits in a character.&lt;br /&gt;
;                  $iStopBits           - [in] Specifies the number of stop bits that define the end of a character: 1, 1.5, or 2.&lt;br /&gt;
; Return values .: Success - The open handle to a specified communications device.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort, _CommAPI_ClosePort, _CommAPI_CreateModeString&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenCOMPort(Const $iPort, Const $iBaudRate = Default, Const $iParity = Default, Const $iByteSize = Default, Const $iStopBits = Default)&lt;br /&gt;
	Local $sMode = _CommAPI_CreateModeString($iPort, $iBaudRate, $iParity, $iByteSize, $iStopBits)&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($sMode)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenCOMPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_OpenPort&lt;br /&gt;
; Description ...: Opens a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
; Return values .: Success - The open handle to a specified communications device.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenCOMPort, _CommAPI_ClosePort, _CommAPI_SetCommState&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_OpenPort(Const $sMode)&lt;br /&gt;
	Local $sFileName = &amp;quot;\\.\&amp;quot; &amp;amp; StringLeft($sMode, StringInStr($sMode, &amp;quot;:&amp;quot;) - 1)&lt;br /&gt;
	Local $hFile = _WinAPI_CreateFile($sFileName, 2, $GENERIC_ALL)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	If $hFile &amp;lt;= 0 Then Return SetError(-1, @ScriptLineNumber, 0)&lt;br /&gt;
&lt;br /&gt;
	Local $tDCB = DllStructCreate($tagDCB)&lt;br /&gt;
	Local $tCommTimeouts = DllStructCreate($tagCOMMTIMEOUTS)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_BuildCommDCB($sMode, $tDCB)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;ReadTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_SetCommTimeoutsElement($tCommTimeouts, &amp;quot;WriteTotalTimeoutMultiplier&amp;quot;, 1)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	If Not _CommAPI_SetCommState($hFile, $tDCB) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	If Not _CommAPI_SetCommTimeouts($hFile, $tCommTimeouts) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
&lt;br /&gt;
	Return $hFile&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_OpenPort&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ReceiveData&lt;br /&gt;
; Description ...: Receives data (RxD/RX/RD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ReceiveData(Const $hFile[, $iTimeout = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iTimeout            - [in] An integer value for total read timeout in milliseconds.&lt;br /&gt;
; Return values .: Success - Received string&lt;br /&gt;
;                  Failure - Empty string&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......: If the result contains Chr(0), you should convert the result with function Binary().&lt;br /&gt;
; Related .......: _CommAPI_TransmitData&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ReceiveData(Const $hFile, Const $iTimeout = 0)&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;char&amp;quot;)&lt;br /&gt;
	Local $hTimer = TimerInit()&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	Do&lt;br /&gt;
		_WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), 1, $iWritten)&lt;br /&gt;
		If @error Then Return SetError(@error, 0, $sResult)&lt;br /&gt;
		If $iWritten Then $sResult &amp;amp;= DllStructGetData($tBuffer, 1)&lt;br /&gt;
	Until Not $iWritten And ( $sResult Or $iTimeout &amp;lt; TimerDiff($hTimer) )&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ReceiveData&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitData&lt;br /&gt;
; Description ...: Transmits data (TxD/TX/TD) to a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sData               - [in] A string value to transmit.&lt;br /&gt;
; Return values .: Success - The number of bytes written.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ReceiveData&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitData(Const $hFile, Const $sData)&lt;br /&gt;
	Local $iWritten = 0&lt;br /&gt;
	Local $tBuffer = DllStructCreate(&amp;quot;byte[&amp;quot; &amp;amp; StringLen($sData) &amp;amp; &amp;quot;]&amp;quot;)&lt;br /&gt;
	DllStructSetData($tBuffer, 1, $sData)&lt;br /&gt;
	If @error Then Return SetError(@error)&lt;br /&gt;
	_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), StringLen($sData), $iWritten)&lt;br /&gt;
	If @error Then Return SetError(@error)&lt;br /&gt;
	Return $iWritten&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_TransmitData&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommUtilities.au3&amp;diff=12320</id>
		<title>CommUtilities.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommUtilities.au3&amp;diff=12320"/>
		<updated>2014-03-07T10:00:56Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: Replace hex values with Constants&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommUtilities.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-03-07&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link(s) .......: http://www.autoitscript.com/wiki/CommUtilities.au3&lt;br /&gt;
;                  http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error in CommAPI.au3.&lt;br /&gt;
;                  Everytime @extended is set, you can call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_CommStateToString&lt;br /&gt;
; Description ...: Create a string representation of a DCB structure.&lt;br /&gt;
; Syntax ........: _CommAPI_CommStateToString(Const $tDCB)&lt;br /&gt;
; Parameters ....: $tDCB                - [in] A DCB structure.&lt;br /&gt;
; Return values .: Success - A string representation of a DCB structure.&lt;br /&gt;
;                  Failure - Empty string&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_CommStateToString(Const $tDCB)&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	Local $vValue = 0&lt;br /&gt;
	For $i = 1 To 15&lt;br /&gt;
		$vValue = DllStructGetData($tDCB, $i)&lt;br /&gt;
		If @error Then Return &amp;quot;&amp;quot;&lt;br /&gt;
		Switch $i&lt;br /&gt;
			Case 1&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;DCBlength = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 2&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;Baudrate = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 3&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;fBitFields = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fBinary = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 0)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fParity = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 1)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fOutxCTSFlow = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 2)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fOutxDSRFlow = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 3)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fDTRControl = &amp;quot; &amp;amp; BitAND(0x3, BitShift($vValue, 4)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fDsrSensitivity = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 6)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fTXContinueOnXoff = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 7)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fOutX = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 8)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fInX = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 9)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fErrorChar = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 10)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fNull = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 11)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fRTSControl = &amp;quot; &amp;amp; BitAND(0x3, BitShift($vValue, 12)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;fAbortOnError = &amp;quot; &amp;amp; BitAND(0x1, BitShift($vValue, 14)) &amp;amp; @CRLF&lt;br /&gt;
				$sResult &amp;amp;= @TAB &amp;amp; &amp;quot;Dymmy2 = &amp;quot; &amp;amp; BitAND(0x1FFFF, BitShift($vValue, 15)) &amp;amp; @CRLF&lt;br /&gt;
			Case 4&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;wReserved = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 5&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;XonLim = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 6&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;XoffLim = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 7&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;ByteSize = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 8&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;Parity = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 1&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;Stopbits = &amp;quot; &amp;amp; $vValue &amp;amp; @CRLF&lt;br /&gt;
			Case 10&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;XonChar = &amp;quot; &amp;amp; Binary($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 11&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;XoffChar = &amp;quot; &amp;amp; Binary($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 12&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;ErrorChar = &amp;quot; &amp;amp; Binary($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 13&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;EofChar = &amp;quot; &amp;amp; Binary($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 14&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;EvtChar = &amp;quot; &amp;amp; Binary($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 15&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;wReserved = &amp;quot; &amp;amp; $vValue&lt;br /&gt;
		EndSwitch&lt;br /&gt;
	Next&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_CommStateToString&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_CommTimeoutsToString&lt;br /&gt;
; Description ...: Create s string representation of a COMMTIMEOUTS structure.&lt;br /&gt;
; Syntax ........: _CommAPI_CommTimeoutsToString(Const $tCommTimeouts)&lt;br /&gt;
; Parameters ....: $tCommTimeouts       - [in] A COMMTIMEOUTS structure.&lt;br /&gt;
; Return values .: Success - A string representation of a COMMTIMEOUTS structure.&lt;br /&gt;
;                  Failure - Empty string&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363190(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_CommTimeoutsToString(Const $tCommTimeouts)&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	Local $vValue = 0&lt;br /&gt;
	For $i = 1 To 5&lt;br /&gt;
		$vValue = DllStructGetData($tCommTimeouts, $i)&lt;br /&gt;
		If @error Then Return &amp;quot;&amp;quot;&lt;br /&gt;
		Switch $i&lt;br /&gt;
			Case 1&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;ReadIntervalTimeout = &amp;quot; &amp;amp; String($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 2&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;ReadTotalTimeoutMultiplier = &amp;quot; &amp;amp; String($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 3&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;ReadTotalTimeoutConstant = &amp;quot; &amp;amp; String($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 4&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;WriteTotalTimeoutMultiplier = &amp;quot; &amp;amp; String($vValue) &amp;amp; @CRLF&lt;br /&gt;
			Case 5&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot;WriteTotalTimeoutConstant = &amp;quot; &amp;amp; String($vValue)&lt;br /&gt;
		EndSwitch&lt;br /&gt;
	Next&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_CommTimeoutsToString&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_CreateModeString&lt;br /&gt;
; Description ...: Create definition string&lt;br /&gt;
; Syntax ........: _CommAPI_CreateModeString(Const $iPort[, $iBaudRate = Default[, $iParity = Default[, $iByteSize = Default[,&lt;br /&gt;
;                  $iStopBits = Default[, $iTimeouts = Default[, $iXON = Default[, $iDSR = Default[, $iCTS = Default[,&lt;br /&gt;
;                  $iDTR = Default[, $iRTS = Default[, $iIDSR = Default]]]]]]]]]]])&lt;br /&gt;
; Parameters ....: $iPort               - [in] A port number.&lt;br /&gt;
;                  $iBaudRate           - [in] The baud rate at which the communications device operates.&lt;br /&gt;
;                  $iParity             - [in] The parity scheme to be used.&lt;br /&gt;
;                  $iByteSize           - [in] Specifies the number of data bits in a character.&lt;br /&gt;
;                  $iStopBits           - [in] Specifies the number of stop bits that define the end of a character: 1, 1.5, or 2.&lt;br /&gt;
;                  $iXON                - [in] Specifies whether the xon or xoff protocol for data-flow control is on or off.&lt;br /&gt;
;                  $iDSR                - [in] Specifies whether output handshaking that uses the Data Set Ready (DSR) circuit is on or off.&lt;br /&gt;
;                  $iCTS                - [in] Specifies whether output handshaking that uses the Clear To Send (CTS) circuit is on or off.&lt;br /&gt;
;                  $iDTR                - [in] Specifies whether the Data Terminal Ready (DTR) circuit is on or off or set to handshake.&lt;br /&gt;
;                  $iRTS                - [in] Specifies whether the Request To Send (RTS) circuit is set to on, off, handshake, or toggle.&lt;br /&gt;
;                  $iIDSR               - [in] Specifies whether the DSR circuit sensitivity is on or off.&lt;br /&gt;
; Return values .: Device-control String&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_OpenPort&lt;br /&gt;
; Link ..........: http://technet.microsoft.com/en-us/library/cc732236.aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_CreateModeString(Const $iPort, Const $iBaudRate = Default, Const $iParity = Default, Const $iByteSize = Default, Const $iStopBits = Default, Const $iXON = Default, $iDSR = Default, $iCTS = Default, $iDTR = Default, $iRTS = Default, $iIDSR = Default)&lt;br /&gt;
	Local $sResult = &amp;quot;&amp;quot;&lt;br /&gt;
	Switch Number($iPort)&lt;br /&gt;
		Case 1 To 256&lt;br /&gt;
			$sResult = &amp;quot;COM&amp;quot; &amp;amp; $iPort &amp;amp; &amp;quot;:&amp;quot;&lt;br /&gt;
		Case Else&lt;br /&gt;
			$sResult = &amp;quot;COM1:&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch Number($iBaudRate)&lt;br /&gt;
		Case 11 To 256000&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; BAUD=&amp;quot; &amp;amp; $iBaudRate&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iParity)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;N&amp;quot;, &amp;quot;NONE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; PARITY=N&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;O&amp;quot;, &amp;quot;ODD&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; PARITY=O&amp;quot;&lt;br /&gt;
		Case &amp;quot;2&amp;quot;, &amp;quot;E&amp;quot;, &amp;quot;EVEN&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; PARITY=E&amp;quot;&lt;br /&gt;
		Case &amp;quot;3&amp;quot;, &amp;quot;M&amp;quot;, &amp;quot;MARK&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; PARITY=M&amp;quot;&lt;br /&gt;
		Case &amp;quot;4&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;SPACE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; PARITY=S&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch Number($iByteSize)&lt;br /&gt;
		Case 5 To 8&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; DATA=&amp;quot; &amp;amp; $iByteSize&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	If IsNumber($iStopBits) Then&lt;br /&gt;
		Switch $iStopBits&lt;br /&gt;
			Case 0&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=1&amp;quot;&lt;br /&gt;
			Case 1&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=1.5&amp;quot;&lt;br /&gt;
			Case 2&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=2&amp;quot;&lt;br /&gt;
		EndSwitch&lt;br /&gt;
	Else&lt;br /&gt;
		Switch StringUpper($iStopBits)&lt;br /&gt;
			Case &amp;quot;1&amp;quot;, &amp;quot;O&amp;quot;, &amp;quot;ONE&amp;quot;&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=1&amp;quot;&lt;br /&gt;
			Case &amp;quot;1.5&amp;quot;, &amp;quot;F&amp;quot;, &amp;quot;FIVE&amp;quot;&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=1.5&amp;quot;&lt;br /&gt;
			Case &amp;quot;2&amp;quot;, &amp;quot;T&amp;quot;, &amp;quot;TWO&amp;quot;&lt;br /&gt;
				$sResult &amp;amp;= &amp;quot; STOP=2&amp;quot;&lt;br /&gt;
		EndSwitch&lt;br /&gt;
	EndIf&lt;br /&gt;
	Switch StringUpper($iXON)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; XON=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; XON=ON&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iDSR)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; ODSR=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; ODSR=ON&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iCTS)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; OCTS=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; OCTS=ON&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iDTR)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; DTR=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; DTR=ON&amp;quot;&lt;br /&gt;
		Case &amp;quot;2&amp;quot;, &amp;quot;HS&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; DTR=HS&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iRTS)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; RTS=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; RTS=ON&amp;quot;&lt;br /&gt;
		Case &amp;quot;2&amp;quot;, &amp;quot;HS&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; RTS=HS&amp;quot;&lt;br /&gt;
		Case &amp;quot;3&amp;quot;, &amp;quot;TG&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; RTS=TG&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Switch StringUpper($iIDSR)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; IDSR=OFF&amp;quot;&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;&lt;br /&gt;
			$sResult &amp;amp;= &amp;quot; IDSR=ON&amp;quot;&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_CreateModeString&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCOMPorts&lt;br /&gt;
; Description ...:&lt;br /&gt;
; Syntax ........: _CommAPI_GetCOMPorts()&lt;br /&gt;
; Parameters ....:&lt;br /&gt;
; Return values .: Success - A string with all COM Ports.&lt;br /&gt;
;                  Failure - Empty string&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........:&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCOMPorts()&lt;br /&gt;
	Local $sResult&lt;br /&gt;
	Local $oWMIService = ObjGet(&amp;quot;winmgmts:\\localhost\root\CIMV2&amp;quot;)&lt;br /&gt;
	If @error Then Return SetError(@error, 0, &amp;quot;&amp;quot;)&lt;br /&gt;
	Local $oItems = $oWMIService.ExecQuery(&amp;quot;SELECT * FROM Win32_PnPEntity WHERE Name LIKE &#039;%(COM%)&#039;&amp;quot;, &amp;quot;WQL&amp;quot;, 48)&lt;br /&gt;
	For $oItem In $oItems&lt;br /&gt;
		$sResult &amp;amp;= $oItem.Name &amp;amp; @CRLF&lt;br /&gt;
	Next&lt;br /&gt;
	Return $sResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCOMPorts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPIHelper.au3&amp;diff=12319</id>
		<title>CommAPIHelper.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPIHelper.au3&amp;diff=12319"/>
		<updated>2014-03-07T10:00:34Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: Replace hex values with Constants&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommAPIHelper.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-03-07&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error in CommAPI.au3.&lt;br /&gt;
;                  Everytime @extended is set, you can call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPI.au3&amp;quot;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ChangeCommStateElement&lt;br /&gt;
; Description ...: Change one control setting for an element of a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ChangeCommStateElement(Const $hFile, Const $sElement, Const $vValue)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sElement            - [in] A element name of DCB structure.&lt;br /&gt;
;                  $vValue              - [in] A new value for the element.&lt;br /&gt;
; Return values .: Success - Previous data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommStateElement, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ChangeCommStateElement(Const $hFile, Const $sElement, Const $vValue)&lt;br /&gt;
	Local $tDCB = DllStructCreate($tagDCB)&lt;br /&gt;
	If Not _CommAPI_GetCommState($hFile, $tDCB) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Local $vResult = _CommAPI_SetCommStateElement($tDCB, $sElement, $vValue)&lt;br /&gt;
	If Not _CommAPI_SetCommState($hFile, $tDCB) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ChangeCommStateElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ChangeCommTimeoutsElement&lt;br /&gt;
; Description ...: Change one time-out parameter for an element off a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ChangeCommTimeoutsElement(Const $hFile, Const $sElement, Const $vValue)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sElement            - [in] A element name of COMMTIMEOUTS structure.&lt;br /&gt;
;                  $vValue              - [in] A new value for the element.&lt;br /&gt;
; Return values .: Success - Previous data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommTimeoutsElement, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363190(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ChangeCommTimeoutsElement(Const $hFile, Const $sElement, Const $vValue)&lt;br /&gt;
	Local $tCommTimeouts = DllStructCreate($tagCOMMTIMEOUTS)&lt;br /&gt;
	If Not _CommAPI_GetCommTimeouts($hFile, $tCommTimeouts) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Local $vResult = _CommAPI_SetCommTimeoutsElement($tCommTimeouts, $sElement, $vValue)&lt;br /&gt;
	If Not _CommAPI_SetCommTimeouts($hFile, $tCommTimeouts) Then Return SetError(@error, @extended, 0)&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ChangeCommTimeoutsElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommStateElement&lt;br /&gt;
; Description ...: Retrieves one control setting for an element of a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommStateElement(Const $tDCB, Const $sElement)&lt;br /&gt;
; Parameters ....: $tDCB                - [in] A DCB structure.&lt;br /&gt;
;                  $sElement            - [in] A element name of DCB structure.&lt;br /&gt;
; Return values .: Success - Data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommState, _CommAPI_SetCommStateElement, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommStateElement(Const $tDCB, Const $sElement)&lt;br /&gt;
	Switch $sElement&lt;br /&gt;
		Case &amp;quot;fBinary&amp;quot;&lt;br /&gt;
			Return BitAND(0x1, BitShift(DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;), 0))&lt;br /&gt;
		Case &amp;quot;fParity&amp;quot;&lt;br /&gt;
			Return BitAND(0x1, BitShift(DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;), 1))&lt;br /&gt;
		Case &amp;quot;fOutxCTSFlow&amp;quot;&lt;br /&gt;
			Return BitAND(0x1, BitShift(DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;), 2))&lt;br /&gt;
		Case &amp;quot;fOutxDSRFlow&amp;quot;&lt;br /&gt;
			Return BitAND(0x1, BitShift(DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;), 3))&lt;br /&gt;
		Case &amp;quot;fDTRControl&amp;quot;&lt;br /&gt;
			Return BitAND(0x3, BitShift(DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;), 4))&lt;br /&gt;
		Case &amp;quot;fDsrSensitivity&amp;quot;&lt;br /&gt;
			Return BitAND(0x1, BitShift(DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;), 6))&lt;br /&gt;
		Case &amp;quot;fTXContinueOnXoff&amp;quot;&lt;br /&gt;
			Return BitAND(0x1, BitShift(DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;), 7))&lt;br /&gt;
		Case &amp;quot;fOutX&amp;quot;&lt;br /&gt;
			Return BitAND(0x1, BitShift(DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;), 8))&lt;br /&gt;
		Case &amp;quot;fInX&amp;quot;&lt;br /&gt;
			Return BitAND(0x1, BitShift(DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;), 9))&lt;br /&gt;
		Case &amp;quot;fErrorChar&amp;quot;&lt;br /&gt;
			Return BitAND(0x1, BitShift(DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;), 10))&lt;br /&gt;
		Case &amp;quot;fNull&amp;quot;&lt;br /&gt;
			Return BitAND(0x1, BitShift(DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;), 11))&lt;br /&gt;
		Case &amp;quot;fRTSControl&amp;quot;&lt;br /&gt;
			Return BitAND(0x3, BitShift(DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;), 12))&lt;br /&gt;
		Case &amp;quot;fAbortOnError&amp;quot;&lt;br /&gt;
			Return BitAND(0x1, BitShift(DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;), 14))&lt;br /&gt;
		Case &amp;quot;Dymmy2&amp;quot;&lt;br /&gt;
			Return BitAND(0x1FFFF, BitShift(DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;), 15))&lt;br /&gt;
		Case Else&lt;br /&gt;
			Return DllStructGetData($tDCB, $sElement)&lt;br /&gt;
	EndSwitch&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommStateElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommTimeoutsElement&lt;br /&gt;
; Description ...: Retrieves one time-out parameter for an element of a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommTimeoutsElement(Const $tCommTimeouts, Const $sElement)&lt;br /&gt;
; Parameters ....: $tCommTimeouts       - [in] A COMMTIMEOUTS structure.&lt;br /&gt;
;                  $sElement            - [in] A element name of DCB structure.&lt;br /&gt;
; Return values .: Success - Data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommTimeouts, _CommAPI_SetCommTimeoutsElement, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363190(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommTimeoutsElement(Const $tCommTimeouts, Const $sElement)&lt;br /&gt;
	Return DllStructGetData($tCommTimeouts, $sElement)&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommTimeoutsElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_IsOnCTS&lt;br /&gt;
; Description ...: The CTS (clear-to-send) signal is on.&lt;br /&gt;
; Syntax ........: _CommAPI_IsOnCTS(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_IsOnCTS(Const $hFile)&lt;br /&gt;
	Local $iModemStatus = _CommAPI_GetCommModemStatus($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	If BitAND($iModemStatus, $MS_CTS_ON) Then Return True&lt;br /&gt;
	Return False&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_IsOnCTS&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_IsOnDSR&lt;br /&gt;
; Description ...: The DSR (data-set-ready) signal is on.&lt;br /&gt;
; Syntax ........: _CommAPI_IsOnDSR(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_IsOnDSR(Const $hFile)&lt;br /&gt;
	Local $iModemStatus = _CommAPI_GetCommModemStatus($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	If BitAND($iModemStatus, $MS_DSR_ON) Then Return True&lt;br /&gt;
	Return False&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_IsOnDSR&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_IsOnRI&lt;br /&gt;
; Description ...: The RI (ring indicator) signal is on.&lt;br /&gt;
; Syntax ........: _CommAPI_IsOnRI(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_IsOnRI(Const $hFile)&lt;br /&gt;
	Local $iModemStatus = _CommAPI_GetCommModemStatus($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	If BitAND($iModemStatus, $MS_RING_ON) Then Return True&lt;br /&gt;
	Return False&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_IsOnRI&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_IsOnDCD&lt;br /&gt;
; Description ...: The DCD/CD/RLSD (Data Carrier Detect/Carrier Detect/receive-line-signal-detect) signal is on.&lt;br /&gt;
; Syntax ........: _CommAPI_IsOnDCD(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_IsOnDCD(Const $hFile)&lt;br /&gt;
	Local $iModemStatus = _CommAPI_GetCommModemStatus($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	If BitAND($iModemStatus, $MS_RLSD_ON) Then Return True&lt;br /&gt;
	Return False&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_IsOnDCD&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommStateElement&lt;br /&gt;
; Description ...: Set one control setting for an element of a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommStateElement(ByRef $tDCB, Const $sElement, Const $vValue)&lt;br /&gt;
; Parameters ....: $tDCB                - [in/out] A DCB structure.&lt;br /&gt;
;                  $sElement            - [in] A element name of DCB structure.&lt;br /&gt;
;                  $vValue              - [in] A new value for the element.&lt;br /&gt;
; Return values .: Success - Previous data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommState, _CommAPI_GetCommStateElement, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommStateElement(ByRef $tDCB, Const $sElement, Const $vValue)&lt;br /&gt;
	Local $vResult = 0&lt;br /&gt;
	Switch $sElement&lt;br /&gt;
		Case &amp;quot;fBinary&amp;quot;, &amp;quot;fParity&amp;quot;, &amp;quot;fOutxCTSFlow&amp;quot;, &amp;quot;fOutxDSRFlow&amp;quot;, &amp;quot;fDTRControl&amp;quot;, &amp;quot;fDsrSensitivity&amp;quot;, &amp;quot;fTXContinueOnXoff&amp;quot;, &amp;quot;fOutX&amp;quot;, &amp;quot;fInX&amp;quot;, &amp;quot;fErrorChar&amp;quot;, &amp;quot;fNull&amp;quot;, &amp;quot;fRTSControl&amp;quot;, &amp;quot;fAbortOnError&amp;quot;, &amp;quot;Dymmy2&amp;quot;&lt;br /&gt;
			$vResult = DllStructGetData($tDCB, &amp;quot;fBitFields&amp;quot;)&lt;br /&gt;
			If @error Then Return SetError(@error)&lt;br /&gt;
			Switch $sElement&lt;br /&gt;
				Case &amp;quot;fBinary&amp;quot;&lt;br /&gt;
					$vResult = BitXOR(BitShift(BitAND($vValue, 0x1), -0), BitAND($vResult, 0xFFFFFFFE))&lt;br /&gt;
				Case &amp;quot;fParity&amp;quot;&lt;br /&gt;
					$vResult = BitXOR(BitShift(BitAND($vValue, 0x1), -1), BitAND($vResult, 0xFFFFFFFD))&lt;br /&gt;
				Case &amp;quot;fOutxCTSFlow&amp;quot;&lt;br /&gt;
					$vResult = BitXOR(BitShift(BitAND($vValue, 0x1), -2), BitAND($vResult, 0xFFFFFFFB))&lt;br /&gt;
				Case &amp;quot;fOutxDSRFlow&amp;quot;&lt;br /&gt;
					$vResult = BitXOR(BitShift(BitAND($vValue, 0x1), -3), BitAND($vResult, 0xFFFFFFF7))&lt;br /&gt;
				Case &amp;quot;fDTRControl&amp;quot;&lt;br /&gt;
					$vResult = BitXOR(BitShift(BitAND($vValue, 0x3), -4), BitAND($vResult, 0xFFFFFFCF))&lt;br /&gt;
				Case &amp;quot;fDsrSensitivity&amp;quot;&lt;br /&gt;
					$vResult = BitXOR(BitShift(BitAND($vValue, 0x1), -6), BitAND($vResult, 0xFFFFFFBF))&lt;br /&gt;
				Case &amp;quot;fTXContinueOnXoff&amp;quot;&lt;br /&gt;
					$vResult = BitXOR(BitShift(BitAND($vValue, 0x1), -7), BitAND($vResult, 0xFFFFFF7F))&lt;br /&gt;
				Case &amp;quot;fOutX&amp;quot;&lt;br /&gt;
					$vResult = BitXOR(BitShift(BitAND($vValue, 0x1), -8), BitAND($vResult, 0xFFFFFEFF))&lt;br /&gt;
				Case &amp;quot;fInX&amp;quot;&lt;br /&gt;
					$vResult = BitXOR(BitShift(BitAND($vValue, 0x1), -9), BitAND($vResult, 0xFFFFFDFF))&lt;br /&gt;
				Case &amp;quot;fErrorChar&amp;quot;&lt;br /&gt;
					$vResult = BitXOR(BitShift(BitAND($vValue, 0x1), -10), BitAND($vResult, 0xFFFFFBFF))&lt;br /&gt;
				Case &amp;quot;fNull&amp;quot;&lt;br /&gt;
					$vResult = BitXOR(BitShift(BitAND($vValue, 0x1), -11), BitAND($vResult, 0xFFFFF7FF))&lt;br /&gt;
				Case &amp;quot;fRTSControl&amp;quot;&lt;br /&gt;
					$vResult = BitXOR(BitShift(BitAND($vValue, 0x3), -12), BitAND($vResult, 0xFFFFCFFF))&lt;br /&gt;
				Case &amp;quot;fAbortOnError&amp;quot;&lt;br /&gt;
					$vResult = BitXOR(BitShift(BitAND($vValue, 0x1), -14), BitAND($vResult, 0xFFFFBFFF))&lt;br /&gt;
				Case &amp;quot;Dymmy2&amp;quot;&lt;br /&gt;
					$vResult = BitXOR(BitShift(BitAND($vValue, 0x1FFFF), -15), BitAND($vResult, 0x7FFF))&lt;br /&gt;
			EndSwitch&lt;br /&gt;
			$vResult = DllStructSetData($tDCB, &amp;quot;fBitFields&amp;quot;, $vResult)&lt;br /&gt;
			If @error Then Return SetError(@error)&lt;br /&gt;
		Case Else&lt;br /&gt;
			$vResult = DllStructSetData($tDCB, $sElement, $vValue)&lt;br /&gt;
			If @error Then Return SetError(@error)&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommStateElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommTimeoutsElement&lt;br /&gt;
; Description ...: Sets one time-out parameter for an element off a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommTimeoutsElement(Byref $tCommTimeouts, Const $sElement, Const $vValue)&lt;br /&gt;
; Parameters ....: $tCommTimeouts       - [in/out] A COMMTIMEOUTS structure.&lt;br /&gt;
;                  $sElement            - [in] A element name of COMMTIMEOUTS structure.&lt;br /&gt;
;                  $vValue              - [in] A new value for the element.&lt;br /&gt;
; Return values .: Success - Previous data in the element of the struct.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ChangeCommTimeoutsElement, _CommAPI_SetCommTimeouts, _CommAPI_GetCommTimeoutsElement, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363190(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommTimeoutsElement(ByRef $tCommTimeouts, Const $sElement, Const $vValue)&lt;br /&gt;
	Local $vResult = DllStructSetData($tCommTimeouts, $sElement, $vValue)&lt;br /&gt;
	If @error Then Return SetError(@error)&lt;br /&gt;
	Return $vResult&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommTimeoutsElement&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetOnDTR&lt;br /&gt;
; Description ...: Sends or clears the DTR (data-terminal-ready) signal.&lt;br /&gt;
; Syntax ........: _CommAPI_SetOnDTR(Const $hFile, Const $iDTR)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iDTR                - [in] A boolean value: True  - Sends the DTR (data-terminal-ready) signal.&lt;br /&gt;
;                                                               False - Clears the DTR (data-terminal-ready) signal.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_EscapeCommFunction&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363254(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetOnDTR(Const $hFile, Const $iDTR)&lt;br /&gt;
	Local $iFunction = 0&lt;br /&gt;
	Switch StringUpper($iDTR)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;, String($CLRDTR)&lt;br /&gt;
			$iFunction = $CLRDTR&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;, String($SETDTR)&lt;br /&gt;
			$iFunction = $SETDTR&lt;br /&gt;
		Case Else&lt;br /&gt;
			Return False&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	_CommAPI_EscapeCommFunction($hFile, $iFunction)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetOnDTR&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetOnRTS&lt;br /&gt;
; Description ...: Sends or clears the RTS (request-to-send) signal.&lt;br /&gt;
; Syntax ........: _CommAPI_SetOnRTS(Const $hFile, Const $iRTS)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iRTS                - [in] A boolean value: True  - Sends the RTS (request-to-send) signal.&lt;br /&gt;
;                                                               False - Clears the RTS (request-to-send) signal.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_EscapeCommFunction&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363254(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetOnRTS(Const $hFile, Const $iRTS)&lt;br /&gt;
	Local $iFunction = 0&lt;br /&gt;
	Switch StringUpper($iRTS)&lt;br /&gt;
		Case &amp;quot;0&amp;quot;, &amp;quot;OFF&amp;quot;, &amp;quot;FALSE&amp;quot;, String($CLRRTS)&lt;br /&gt;
			$iFunction = $CLRRTS&lt;br /&gt;
		Case &amp;quot;1&amp;quot;, &amp;quot;ON&amp;quot;, &amp;quot;TRUE&amp;quot;, String($SETRTS)&lt;br /&gt;
			$iFunction = $SETRTS&lt;br /&gt;
		Case Else&lt;br /&gt;
			Return False&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	_CommAPI_EscapeCommFunction($hFile, $iFunction)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetOnRTS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI.au3&amp;diff=12318</id>
		<title>CommAPI.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI.au3&amp;diff=12318"/>
		<updated>2014-03-07T10:00:03Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: Replace hex values with Constants&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommAPI.au3&lt;br /&gt;
; Title .........: Communications Functions of Windows API&lt;br /&gt;
; Description ...: Communications Functions of Windows API calls that have been translated to AutoIt functions.&lt;br /&gt;
; Version Date ..: 2014-03-07&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; Error handling : Everytime @extended is set, it is filled with @ScriptLineNumber of the error in CommAPI.au3.&lt;br /&gt;
;                  Everytime @extended is set, you can call _WinAPI_GetLastError or _WinAPI_GetLastErrorMessage.&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#include &amp;quot;CommAPIConstants.au3&amp;quot;&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_BuildCommDCB&lt;br /&gt;
; Description ...: Fills a specified DCB structure with values specified in a device-control string.&lt;br /&gt;
; Syntax ........: _CommAPI_BuildCommDCB(Const $sMode, Byref $tDBC)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
;                  $tDBC                - [out] A DCB structure.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_BuildCommDCBAndTimeouts, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363143(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_BuildCommDCB(Const $sMode, ByRef $tDBC)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;BuildCommDCB&amp;quot;, &amp;quot;str&amp;quot;, $sMode, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDBC))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(6, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_BuildCommDCB&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_BuildCommDCBAndTimeouts&lt;br /&gt;
; Description ...: Translates a device-definition string into appropriate device-control block codes and places them into a device control block.&lt;br /&gt;
;                  The function can also set up time-out values for a device.&lt;br /&gt;
; Syntax ........: _CommAPI_BuildCommDCBAndTimeouts(Const $sMode, Byref $tDBC, Byref $tCommTimeouts)&lt;br /&gt;
; Parameters ....: $sMode               - [in] A device-definition string.&lt;br /&gt;
;                  $tDBC                - [out] A DCB structure.&lt;br /&gt;
;                  $tCommTimeouts       - [out] A COMMTIMEOUTS structure.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_BuildCommDCB, $tagDCB, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363145(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_BuildCommDCBAndTimeouts(Const $sMode, ByRef $tDBC, ByRef $tCommTimeouts)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;BuildCommDCBAndTimeouts&amp;quot;, &amp;quot;str&amp;quot;, $sMode, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDBC), &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	If Not $aResult[0] Then Return SetError(6, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_BuildCommDCBAndTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClearCommBreak&lt;br /&gt;
; Description ...: Restores character transmission for a specified communications device and places the transmission line in a nonbreak state.&lt;br /&gt;
; Syntax ........: _CommAPI_ClearCommBreak(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ClearCommError&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363179(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClearCommBreak(Const $hFile)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;ClearCommBreak&amp;quot;, &amp;quot;handle&amp;quot;, $hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClearCommBreak&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_ClearCommError&lt;br /&gt;
; Description ...: Retrieves information about a communications error and reports the current status of a communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_ClearCommError(Const $hFile[, $tComStat = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tComStat            - [out] A COMSTAT structure in which the device&#039;s status information is returned.&lt;br /&gt;
; Return values .: Success - A mask indicating the type of error.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_ClearCommBreak, $tagCOMSTAT&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363180(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_ClearCommError(Const $hFile, $tComStat = 0)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;ClearCommError&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tComStat))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_ClearCommError&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_EscapeCommFunction&lt;br /&gt;
; Description ...: Directs the specified communications device to perform an extended function.&lt;br /&gt;
; Syntax ........: _CommAPI_EscapeCommFunction(Const $hFile, Const $iFunction)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iFunction           - [in] The extended function to be performed.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetOnDTR, _CommAPI_SetOnRTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363254(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_EscapeCommFunction(Const $hFile, Const $iFunction)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;EscapeCommFunction&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iFunction)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_EscapeCommFunction&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommMask&lt;br /&gt;
; Description ...: Retrieves the value of the event mask for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommMask(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - A mask of events that are currently enabled.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363257(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommMask(Const $hFile)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommMask&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommMask&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommModemStatus&lt;br /&gt;
; Description ...: Retrieves the modem control-register values.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommModemStatus(Const $hFile, Byref $pModemStatus)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - The current state of the modem control-register values.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_IsOnCTS, _CommAPI_IsOnDSR, _CommAPI_IsOnRI, _CommAPI_IsOnDCD, _CommAPI_WaitCommEvent&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363258(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommModemStatus(Const $hFile)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommModemStatus&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommModemStatus&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommProperties&lt;br /&gt;
; Description ...: Retrieves information about the communications properties for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommProperties(Const $hFile[, $tCOMMPROP = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCOMMPROP           - [out] A COMMPROP structure in which the communications properties information is returned.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363259(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommProperties(Const $hFile, $tCOMMPROP = 0)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommProperties&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCOMMPROP))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommProperties&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommState&lt;br /&gt;
; Description ...: Retrieves the current control settings for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommState(Const $hFile, $tDCB = 0)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tDCB                - [out] A DCB structure that receives the control settings information.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommState, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363260(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommState(Const $hFile, $tDCB = 0)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommState&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDCB))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommState&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_GetCommTimeouts&lt;br /&gt;
; Description ...: Retrieves the time-out parameters for all read and write operations on a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_GetCommTimeouts(Const $hFile, $tCommTimeouts = 0)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCommTimeouts       - [out] A COMMTIMEOUTS structure in which the time-out information is returned.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_SetCommTimeouts, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363261(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_GetCommTimeouts(Const $hFile, $tCommTimeouts = 0)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;GetCommTimeouts&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_GetCommTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_PurgeComm&lt;br /&gt;
; Description ...: Discards all characters from the output or input buffer of a specified communications resource.&lt;br /&gt;
;                  It can also terminate pending read or write operations on the resource.&lt;br /&gt;
; Syntax ........: _CommAPI_PurgeComm(Const $hFile[, $iFlags = $PURGE_ALL])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iFlags              - [in] An integer value.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363428(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_PurgeComm(Const $hFile, Const $iFlags = $PURGE_ALL)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;PurgeComm&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iFlags)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_PurgeComm&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommBreak&lt;br /&gt;
; Description ...: Suspends character transmission for a specified communications device and places the transmission line in a break state until the ClearCommBreak function is called.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommBreak(Const $hFile)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363433(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommBreak(Const $hFile)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommBreak&amp;quot;, &amp;quot;handle&amp;quot;, $hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommBreak&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommMask&lt;br /&gt;
; Description ...: Specifies a set of events to be monitored for a communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommMask(Const $hFile, Const $iEventMask)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iEventMask          - [in] The events to be enabled. A value of zero disables all events.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363435(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommMask(Const $hFile, Const $iEventMask)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommMask&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iEventMask)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommMask&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommState&lt;br /&gt;
; Description ...: Configures a communications device according to the specifications in a device-control block.&lt;br /&gt;
;                  The function reinitializes all hardware and control settings, but it does not empty output or input queues.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommState(Const $hFile, Const $tDCB)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tDCB                - [in] A DCB structure that contains the configuration information for the specified communications device.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommState, $tagDCB&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363436(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommState(Const $hFile, Const $tDCB)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommState&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tDCB))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommState&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetCommTimeouts&lt;br /&gt;
; Description ...: Sets the time-out parameters for all read and write operations on a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetCommTimeouts(Const $hFile, Const $tCommTimeouts)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tCommTimeouts       - [in] A COMMTIMEOUTS structure that contains the new time-out values.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_GetCommTimeouts, $tagCOMMTIMEOUTS&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363437(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetCommTimeouts(Const $hFile, Const $tCommTimeouts)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetCommTimeouts&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tCommTimeouts))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetCommTimeouts&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_SetupComm&lt;br /&gt;
; Description ...: Initializes the communications parameters for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_SetupComm(Const $hFile, Const $iInQueue, Const $iOutQueue)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $iInQueue            - [in] The recommended size of the device&#039;s internal input buffer, in bytes.&lt;br /&gt;
;                  $iOutQueue           - [in] The recommended size of the device&#039;s internal output buffer, in bytes.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363439(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_SetupComm(Const $hFile, Const $iInQueue, Const $iOutQueue)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;SetupComm&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword&amp;quot;, $iInQueue, &amp;quot;dword&amp;quot;, $iOutQueue)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_SetupComm&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_TransmitCommChar&lt;br /&gt;
; Description ...: Transmits a specified character ahead of any pending data in the output buffer of the specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_TransmitCommChar(Const $hFile, Const $cChar)&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $sChar               - [in] The character to be transmitted.&lt;br /&gt;
; Return values .: Success - True&lt;br /&gt;
;                  Failure - False&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......:&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363473(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_TransmitCommChar(Const $hFile, Const $cChar)&lt;br /&gt;
	Local $tChar = DllStructCreate(&amp;quot;char&amp;quot;)&lt;br /&gt;
	DllStructSetData($tChar, 1, $cChar)&lt;br /&gt;
	DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;TransmitCommChar&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;char&amp;quot;, $tChar)&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, False)&lt;br /&gt;
	Return True&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_TransmitCommChar&lt;br /&gt;
&lt;br /&gt;
; #FUNCTION# ====================================================================================================================&lt;br /&gt;
; Name ..........: _CommAPI_WaitCommEvent&lt;br /&gt;
; Description ...: Waits for an event to occur for a specified communications device.&lt;br /&gt;
; Syntax ........: _CommAPI_WaitCommEvent(Const $hFile [, Const $tOverlapped = 0])&lt;br /&gt;
; Parameters ....: $hFile               - [in] A handle to the communications device.&lt;br /&gt;
;                  $tOverlapped         - [in] An OVERLAPPED structure.&lt;br /&gt;
; Return values .: Success - A mask indicating the type of event that occurred.&lt;br /&gt;
;                  Failure - 0&lt;br /&gt;
; Author ........:&lt;br /&gt;
; Modified ......:&lt;br /&gt;
; Remarks .......:&lt;br /&gt;
; Related .......: _CommAPI_EscapeCommFunction, _CommAPI_GetCommModemStatus&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363479(v=vs.85).aspx&lt;br /&gt;
; Example .......: No&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
Func _CommAPI_WaitCommEvent(Const $hFile, Const $tOverlapped = 0)&lt;br /&gt;
	Local $aResult = DllCall(&amp;quot;kernel32.dll&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;WaitCommEvent&amp;quot;, &amp;quot;handle&amp;quot;, $hFile, &amp;quot;dword*&amp;quot;, 0, &amp;quot;ptr&amp;quot;, DllStructGetPtr($tOverlapped))&lt;br /&gt;
	If @error Then Return SetError(@error, @ScriptLineNumber, 0)&lt;br /&gt;
	Return $aResult[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_CommAPI_WaitCommEvent&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPIConstants.au3&amp;diff=12317</id>
		<title>CommAPIConstants.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPIConstants.au3&amp;diff=12317"/>
		<updated>2014-03-07T09:59:30Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: Add Constants&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script]]&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Name ..........: CommAPIStructures.au3&lt;br /&gt;
; Title .........: Communications structures of Windows API&lt;br /&gt;
; Description ...: Communications structures of Windows API calls that have been translated to AutoIt structures.&lt;br /&gt;
; Version Date ..: 2014-03-07&lt;br /&gt;
; AutoIt Version : 3.3.8.1&lt;br /&gt;
; Link ..........: http://msdn.microsoft.com/en-us/library/aa363199(v=vs.85).aspx&lt;br /&gt;
; Tag(s) ........: RS-232, serial port, COM port&lt;br /&gt;
; Author(s) .....:&lt;br /&gt;
; Dll(s) ........: kernel32.dll&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
#include-once&lt;br /&gt;
#NoAutoIt3Execute&lt;br /&gt;
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global Const $tagCOMMPROP = _&lt;br /&gt;
		&amp;quot;WORD  wPacketLength;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  wPacketVersion;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwServiceMask;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwReserved1;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxTxQueue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxRxQueue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxBaud;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwProvSubType;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwProvCapabilities;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSettableParams;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSettableBaud;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  wSettableData;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  wSettableStopParity;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwCurrentTxQueue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwCurrentRxQueue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwProvSpec1;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwProvSpec2;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WCHAR wcProvChar[1];&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Global Const $tagCOMMTIMEOUTS = _&lt;br /&gt;
		&amp;quot;DWORD ReadIntervalTimeout;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD ReadTotalTimeoutMultiplier;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD ReadTotalTimeoutConstant;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD WriteTotalTimeoutMultiplier;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD WriteTotalTimeoutConstant;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cs&lt;br /&gt;
	http://msdn.microsoft.com/en-us/library/aa363200(v=vs.85).aspx&lt;br /&gt;
	The eight actual COMSTAT bit-sized data fields within the four bytes of fBitFields can be manipulated by bitwise logical And/Or operations.&lt;br /&gt;
	FieldName           Bits    Description&lt;br /&gt;
	-----------------   -----   ---------------------------&lt;br /&gt;
	fCtsHold             1      Tx waiting for CTS signal&lt;br /&gt;
	fDsrHold             2      Tx waiting for DSR signal&lt;br /&gt;
	fRlsdHold            3      Tx waiting for RLSD signal&lt;br /&gt;
	fXoffHold            4      Tx waiting, XOFF char rec&#039;d&lt;br /&gt;
	fXoffSent            5      Tx waiting, XOFF char sent&lt;br /&gt;
	fEof                 6      EOF character sent&lt;br /&gt;
	fTxim                7      character waiting for Tx&lt;br /&gt;
	fReserved            8-32   reserved (25 bits)&lt;br /&gt;
#ce&lt;br /&gt;
&lt;br /&gt;
Global Const $tagCOMSTAT = _&lt;br /&gt;
		&amp;quot;DWORD fBitFields;&amp;quot; &amp;amp; _ ; see comment above&lt;br /&gt;
		&amp;quot;DWORD cbInQue;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD cbOutQue;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cs&lt;br /&gt;
	http://msdn.microsoft.com/en-us/library/aa363214(v=vs.85).aspx&lt;br /&gt;
	The fourteen actual DCB bit-sized data fields within the four bytes of fBitFields can be manipulated by bitwise logical And/Or operations.&lt;br /&gt;
	FieldName           Bits    Description&lt;br /&gt;
	-----------------   -----   ---------------------------&lt;br /&gt;
	fBinary              1      binary mode, no EOF check&lt;br /&gt;
	fParity              2      enable parity checking&lt;br /&gt;
	fOutxCtsFlow         3      CTS output flow control&lt;br /&gt;
	fOutxDsrFlow         4      DSR output flow control&lt;br /&gt;
	fDtrControl          5-6    DTR flow control type&lt;br /&gt;
	fDsrSensitivity      7      DSR sensitivity&lt;br /&gt;
	fTXContinueOnXoff    8      XOFF continues Tx&lt;br /&gt;
	fOutX                9      XON/XOFF out flow control&lt;br /&gt;
	fInX                10      XON/XOFF in flow control&lt;br /&gt;
	fErrorCHAR          11      enable error replacement&lt;br /&gt;
	fNull               12      enable null stripping&lt;br /&gt;
	fRtsControl         13-14   RTS flow control&lt;br /&gt;
	fAbortOnError       15      abort reads/writes on error&lt;br /&gt;
	fDummy2             16-32   reserved (17 bits)&lt;br /&gt;
#ce&lt;br /&gt;
&lt;br /&gt;
Global Const $tagDCB = _&lt;br /&gt;
		&amp;quot;DWORD DCBlength;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD BaudRate;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD fBitFields;&amp;quot; &amp;amp; _ ; see comment above&lt;br /&gt;
		&amp;quot;WORD  wReserved;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  XonLim;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  XoffLim;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  ByteSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  Parity;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  StopBits;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  XonChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  XoffChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  ErrorChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  EofChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;CHAR  EvtChar;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;WORD  wReserved1;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Global Const $tagMODEMDEVCAPS = _&lt;br /&gt;
		&amp;quot;DWORD dwActualSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwRequiredSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDevSpecificOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDevSpecificSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemProviderVersion;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemManufacturerOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemManufacturerSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemModelOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemModelSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemVersionOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemVersionSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDialOptions;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwCallSetupFailTimer;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwInactivityTimeout;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSpeakerVolume;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSpeakerMode;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwModemOptions;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxDTERate;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwMaxDCERate;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  abVariablePortion[1];&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Global Const $tagMODEMSETTINGS = _&lt;br /&gt;
		&amp;quot;DWORD dwActualSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwRequiredSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDevSpecificOffset;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwDevSpecificSize;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwCallSetupFailTimer;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwInactivityTimeout;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSpeakerVolume;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwSpeakerMode;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwPreferredModemOptions;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwNegotiatedModemOptions;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;DWORD dwNegotiatedDCERate;&amp;quot; &amp;amp; _&lt;br /&gt;
		&amp;quot;BYTE  abVariablePortion[1];&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global Const $SETXOFF = 1&lt;br /&gt;
Global Const $SETXON = 2&lt;br /&gt;
Global Const $SETRTS = 3&lt;br /&gt;
Global Const $CLRRTS = 4&lt;br /&gt;
Global Const $SETDTR = 5&lt;br /&gt;
Global Const $CLRDTR = 6&lt;br /&gt;
Global Const $SETBREAK = 8&lt;br /&gt;
Global Const $CLRBREAK = 9&lt;br /&gt;
&lt;br /&gt;
Global Const $CE_RXOVER = 0x0001&lt;br /&gt;
Global Const $CE_OVERRUN = 0x0002&lt;br /&gt;
Global Const $CE_RXPARITY = 0x0004&lt;br /&gt;
Global Const $CE_FRAME = 0x0008&lt;br /&gt;
Global Const $CE_BREAK = 0x0010&lt;br /&gt;
&lt;br /&gt;
Global Const $EV_RXCHAR = 0x0001&lt;br /&gt;
Global Const $EV_RXFLAG = 0x0002&lt;br /&gt;
Global Const $EV_TXEMPTY = 0x0004&lt;br /&gt;
Global Const $EV_CTS = 0x0008&lt;br /&gt;
Global Const $EV_DSR = 0x0010&lt;br /&gt;
Global Const $EV_RLSD = 0x0020&lt;br /&gt;
Global Const $EV_BREAK = 0x0040&lt;br /&gt;
Global Const $EV_ERR = 0x0080&lt;br /&gt;
Global Const $EV_RING = 0x0100&lt;br /&gt;
Global Const $EV_PERR = 0x0200&lt;br /&gt;
Global Const $EV_RX80FULL = 0x0400&lt;br /&gt;
Global Const $EV_EVENT1 = 0x0800&lt;br /&gt;
Global Const $EV_EVENT2 = 0x1000&lt;br /&gt;
&lt;br /&gt;
Global Const $MS_CTS_ON = 0x0010&lt;br /&gt;
Global Const $MS_DSR_ON = 0x0020&lt;br /&gt;
Global Const $MS_RING_ON = 0x0040&lt;br /&gt;
Global Const $MS_RLSD_ON = 0x0080&lt;br /&gt;
&lt;br /&gt;
Global Const $PURGE_TXABORT = 0x0001&lt;br /&gt;
Global Const $PURGE_RXABORT = 0x0002&lt;br /&gt;
Global Const $PURGE_TXCLEAR = 0x0004&lt;br /&gt;
Global Const $PURGE_RXCLEAR = 0x0008&lt;br /&gt;
Global Const $PURGE_ALL = 0x000F&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPIStructures.au3&amp;diff=12316</id>
		<title>CommAPIStructures.au3</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPIStructures.au3&amp;diff=12316"/>
		<updated>2014-03-07T09:58:47Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: Redirected page to CommAPIConstants.au3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[CommAPIConstants.au3]]&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12315</id>
		<title>CommAPI</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI&amp;diff=12315"/>
		<updated>2014-03-07T09:58:13Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: Rename CommAPIStructures.au3 to CommAPIConstants.au3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CommAPI translates the communications functions of Windows API to AutoIt functions.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
=== Features ===&lt;br /&gt;
* No need to install DLL&#039;s&lt;br /&gt;
* Using Windows API calls (kernel32.dll)&lt;br /&gt;
* Possibility of serial communication (serial port, COM port, RS-232)&lt;br /&gt;
* Possibility of parallel communication (parallel port, LPT port)&lt;br /&gt;
* No use of global variables&lt;br /&gt;
* Uniform namespace _CommAPI_XXX&lt;br /&gt;
* Modular organization into files&lt;br /&gt;
* A lot of additional utility and helper functions&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
* [[CommAPIConstants.au3]]&lt;br /&gt;
* [[CommAPI.au3]]&lt;br /&gt;
* [[CommAPIHelper.au3]]&lt;br /&gt;
* [[CommUtilities.au3]]&lt;br /&gt;
* [[CommInterface.au3]]&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
[[CommAPI Examples]] shows you some examples. Mayby you could find more examples in [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/?p=1126366 forum].&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
=== History ===&lt;br /&gt;
* 2008-09-12 Creation of cfx.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/#entry578111 (V1.0)]&lt;br /&gt;
* 2011-02-18 Conversation of cfx.au3 into cfxUDF.au3 [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry872154 (V2.0)]&lt;br /&gt;
* 2011-02-28 Update V2.0to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry874547 V2.1]&lt;br /&gt;
* 2011-04-27 Update V2.1 to [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=217993#post217993 V2.2] (german forum)&lt;br /&gt;
* 2013-07-10 Modify V2.1 to [http://www.autoitscript.com/forum/topic/80344-serial-communication-using-kernel32dll/page-2#entry1094288 V2.1mod]&lt;br /&gt;
* 2013-10-24 Creation of [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ CommAPI.au3]&lt;br /&gt;
&lt;br /&gt;
=== Changelog ===&lt;br /&gt;
; 2014-01-23&lt;br /&gt;
: Small update of method _CommAPI_CreateModeString&lt;br /&gt;
; 2014-02-03&lt;br /&gt;
: Change timeout handling (Attention: not backward compatible)&lt;br /&gt;
: Small update of method _CommAPI_PurgeComm&lt;br /&gt;
&lt;br /&gt;
=== Roadmap ===&lt;br /&gt;
There is no roadmap in the moment. Feel free to implement the last five remaining API calls, enhance the scripts or to fix bugs.&lt;br /&gt;
&lt;br /&gt;
=== Support ===&lt;br /&gt;
There is no official support. Try to get help from community in the official forum. [http://www.autoitscript.com/forum/topic/155674-commapi-serial-and-parallel-communication-with-windows-api/ Here you can find the main thread].&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/aa363194(v=vs.85).aspx MSDN Library of communications functions]&lt;br /&gt;
* [http://www.hpcc.ecs.soton.ac.uk/software/Win32API.Txt WIN32API.TXT]&lt;br /&gt;
* cfxUDF.au3 (see section above)&lt;br /&gt;
* [http://www.autoit.de/index.php?page=Thread&amp;amp;postID=198669#post198669 GetCOMPorts] (german forum)&lt;br /&gt;
* [http://www.autoitscript.com/forum/topic/19713-problem-with-struct/#entry136466 ParseCommState]&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== Implemented API functions ===&lt;br /&gt;
* BuildCommDCB&lt;br /&gt;
* BuildCommDCBAndTimeouts&lt;br /&gt;
* ClearCommBreak&lt;br /&gt;
* ClearCommError&lt;br /&gt;
* EscapeCommFunction&lt;br /&gt;
* GetCommMask&lt;br /&gt;
* GetCommModemStatus&lt;br /&gt;
* GetCommProperties&lt;br /&gt;
* GetCommState&lt;br /&gt;
* GetCommTimeouts&lt;br /&gt;
* PurgeComm&lt;br /&gt;
* SetCommBreak&lt;br /&gt;
* SetCommMask&lt;br /&gt;
* SetCommState&lt;br /&gt;
* SetCommTimeouts&lt;br /&gt;
* SetupComm&lt;br /&gt;
* TransmitCommChar&lt;br /&gt;
* WaitCommEvent&lt;br /&gt;
&lt;br /&gt;
=== Unimplemented API functions ===&lt;br /&gt;
* CommConfigDialog&lt;br /&gt;
* GetCommConfig&lt;br /&gt;
* GetDefaultCommConfig&lt;br /&gt;
* SetCommConfig&lt;br /&gt;
* SetDefaultCommConfig&lt;br /&gt;
&lt;br /&gt;
=== API helper functions ===&lt;br /&gt;
* ChangeCommStateElement&lt;br /&gt;
* ChangeCommTimeoutsElement&lt;br /&gt;
* GetCommStateElement&lt;br /&gt;
* GetCommTimeoutsElement&lt;br /&gt;
* IsOnCTS&lt;br /&gt;
* IsOnDCD&lt;br /&gt;
* IsOnDSR&lt;br /&gt;
* IsOnRI&lt;br /&gt;
* SetCommStateElement&lt;br /&gt;
* SetCommTimeoutsElement&lt;br /&gt;
* SetOnDTR&lt;br /&gt;
* SetOnRTS&lt;br /&gt;
&lt;br /&gt;
=== Utility functions ===&lt;br /&gt;
* CommStateToString&lt;br /&gt;
* CommTimeoutsToString&lt;br /&gt;
* CreateModeString&lt;br /&gt;
* GetCOMPorts&lt;br /&gt;
&lt;br /&gt;
=== Interface functions ===&lt;br /&gt;
* ClosePort&lt;br /&gt;
* OpenCOMPort&lt;br /&gt;
* OpenPort&lt;br /&gt;
* ReceiveData&lt;br /&gt;
* TransmitData&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI_Examples&amp;diff=12314</id>
		<title>CommAPI Examples</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI_Examples&amp;diff=12314"/>
		<updated>2014-03-07T09:56:50Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: clean using of _CommAPI_PurgeComm&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Samples]]This site shows you some examples for [[CommAPI]].&lt;br /&gt;
&lt;br /&gt;
== First example ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;CommInterface.au3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Main()&lt;br /&gt;
&lt;br /&gt;
Func Main()&lt;br /&gt;
	Local $iErrorLine = Example()&lt;br /&gt;
	If @extended Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Error&amp;quot;, _WinAPI_GetLastErrorMessage())&lt;br /&gt;
	ElseIf @error Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Error&amp;quot;, &amp;quot;Error in line &amp;quot; &amp;amp; $iErrorLine)&lt;br /&gt;
	EndIf&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local Const $iPort = 1&lt;br /&gt;
	Local Const $iBaud = 9600&lt;br /&gt;
	Local Const $iParity = 0&lt;br /&gt;
	Local Const $iByteSize = 8&lt;br /&gt;
	Local Const $iStopBits = 1&lt;br /&gt;
	Local Const $sCommand = &amp;quot;Command&amp;quot; &amp;amp; @CRLF&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenCOMPort($iPort, $iBaud, $iParity, $iByteSize, $iStopBits)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitData($hFile, $sCommand)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveData($hFile, 5000)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	MsgBox(64, &amp;quot;Result&amp;quot;, $sResult)&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INI file==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;CommInterface.au3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Main()&lt;br /&gt;
&lt;br /&gt;
Func Main()&lt;br /&gt;
	Local $iErrorLine = Example()&lt;br /&gt;
	If @extended Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Error&amp;quot;, _WinAPI_GetLastErrorMessage())&lt;br /&gt;
	ElseIf @error Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Error&amp;quot;, &amp;quot;Error in line &amp;quot; &amp;amp; $iErrorLine)&lt;br /&gt;
	EndIf&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local Const $sFileINI = @ScriptDir &amp;amp; &amp;quot;\Example.ini&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	Local $sMode = _CommAPI_CreateModeString( _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;SerialPort&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;BaudRate&amp;quot;, 9600), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;Parity&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;ByteSize&amp;quot;, 8), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;StopBits&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;XON&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;DSR&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;CTS&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;DTR&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;RTS&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;IDSR&amp;quot;, 0))&lt;br /&gt;
	If @error Then Return SetError(@error, @extended)&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($sMode)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitData($hFile, IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;Command&amp;quot;, &amp;quot;Command&amp;quot; &amp;amp; @CRLF))&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveData($hFile, IniRead($sFileINI, &amp;quot;Timeout&amp;quot;, &amp;quot;IDSR&amp;quot;, 5000))&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	MsgBox(64, &amp;quot;Result&amp;quot;, $sResult)&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command Line ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;CommInterface.au3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Main()&lt;br /&gt;
&lt;br /&gt;
Func Main()&lt;br /&gt;
	Local $iErrorLine = Example()&lt;br /&gt;
	If @extended Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Error&amp;quot;, _WinAPI_GetLastErrorMessage())&lt;br /&gt;
	ElseIf @error Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Error&amp;quot;, &amp;quot;Error in line &amp;quot; &amp;amp; $iErrorLine)&lt;br /&gt;
	EndIf&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
	If $CmdLine[0] &amp;lt;&amp;gt; 2 Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Syntax&amp;quot;, @ScriptName &amp;amp; &#039; &amp;quot;ModeString&amp;quot; &amp;quot;Command&amp;quot;&#039;)&lt;br /&gt;
		Return&lt;br /&gt;
	EndIf&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($CmdLine[1])&lt;br /&gt;
	If @error Then Return SetError(@error, @extended)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitData($hFile, $CmdLine[2])&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveData($hFile, 5000)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	MsgBox(64, &amp;quot;Result&amp;quot;, $sResult)&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;winbatch&amp;quot;&amp;gt;&lt;br /&gt;
@echo off&lt;br /&gt;
cls&lt;br /&gt;
chcp 1252&amp;gt;nul&lt;br /&gt;
cd /d &amp;quot;%~dp0&amp;quot;&lt;br /&gt;
start Example.exe &amp;quot;COM7: BAUD=9600 PARITY=N DATA=8 STOP=1 XON=OFF ODSR=OFF OCTS=ON DTR=ON RTS=ON IDSR=OFF&amp;quot; &amp;quot;Command&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
	<entry>
		<id>https://www.autoitscript.com/w/index.php?title=CommAPI_Examples&amp;diff=12307</id>
		<title>CommAPI Examples</title>
		<link rel="alternate" type="text/html" href="https://www.autoitscript.com/w/index.php?title=CommAPI_Examples&amp;diff=12307"/>
		<updated>2014-02-03T14:55:21Z</updated>

		<summary type="html">&lt;p&gt;Therealhanuta: /* Command Line */ add windows batch file example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Samples]]This site shows you some examples for [[CommAPI]].&lt;br /&gt;
&lt;br /&gt;
== First example ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;CommInterface.au3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Main()&lt;br /&gt;
&lt;br /&gt;
Func Main()&lt;br /&gt;
	Local $iErrorLine = Example()&lt;br /&gt;
	If @extended Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Error&amp;quot;, _WinAPI_GetLastErrorMessage())&lt;br /&gt;
	ElseIf @error Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Error&amp;quot;, &amp;quot;Error in line &amp;quot; &amp;amp; $iErrorLine)&lt;br /&gt;
	EndIf&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local Const $iPort = 1&lt;br /&gt;
	Local Const $iBaud = 9600&lt;br /&gt;
	Local Const $iParity = 0&lt;br /&gt;
	Local Const $iByteSize = 8&lt;br /&gt;
	Local Const $iStopBits = 1&lt;br /&gt;
	Local Const $sCommand = &amp;quot;Command&amp;quot; &amp;amp; @CRLF&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenCOMPort($iPort, $iBaud, $iParity, $iByteSize, $iStopBits)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile, 15)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitData($hFile, $sCommand)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveData($hFile, 5000)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	MsgBox(64, &amp;quot;Result&amp;quot;, $sResult)&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INI file==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;CommInterface.au3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Main()&lt;br /&gt;
&lt;br /&gt;
Func Main()&lt;br /&gt;
	Local $iErrorLine = Example()&lt;br /&gt;
	If @extended Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Error&amp;quot;, _WinAPI_GetLastErrorMessage())&lt;br /&gt;
	ElseIf @error Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Error&amp;quot;, &amp;quot;Error in line &amp;quot; &amp;amp; $iErrorLine)&lt;br /&gt;
	EndIf&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
	Local Const $sFileINI = @ScriptDir &amp;amp; &amp;quot;\Example.ini&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	Local $sMode = _CommAPI_CreateModeString( _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;SerialPort&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;BaudRate&amp;quot;, 9600), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;Parity&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;ByteSize&amp;quot;, 8), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;StopBits&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;XON&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;DSR&amp;quot;, 0), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;CTS&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;DTR&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;RTS&amp;quot;, 1), _&lt;br /&gt;
		IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;IDSR&amp;quot;, 0))&lt;br /&gt;
	If @error Then Return SetError(@error, @extended)&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($sMode)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile, 15)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitData($hFile, IniRead($sFileINI, &amp;quot;COM&amp;quot;, &amp;quot;Command&amp;quot;, &amp;quot;Command&amp;quot; &amp;amp; @CRLF))&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveData($hFile, IniRead($sFileINI, &amp;quot;Timeout&amp;quot;, &amp;quot;IDSR&amp;quot;, 5000))&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	MsgBox(64, &amp;quot;Result&amp;quot;, $sResult)&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command Line ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;CommInterface.au3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Main()&lt;br /&gt;
&lt;br /&gt;
Func Main()&lt;br /&gt;
	Local $iErrorLine = Example()&lt;br /&gt;
	If @extended Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Error&amp;quot;, _WinAPI_GetLastErrorMessage())&lt;br /&gt;
	ElseIf @error Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Error&amp;quot;, &amp;quot;Error in line &amp;quot; &amp;amp; $iErrorLine)&lt;br /&gt;
	EndIf&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func Example()&lt;br /&gt;
	If $CmdLine[0] &amp;lt;&amp;gt; 2 Then&lt;br /&gt;
		MsgBox(32, &amp;quot;Syntax&amp;quot;, @ScriptName &amp;amp; &#039; &amp;quot;ModeString&amp;quot; &amp;quot;Command&amp;quot;&#039;)&lt;br /&gt;
		Return&lt;br /&gt;
	EndIf&lt;br /&gt;
&lt;br /&gt;
	Local $hFile = _CommAPI_OpenPort($CmdLine[1])&lt;br /&gt;
	If @error Then Return SetError(@error, @extended)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClearCommError($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_PurgeComm($hFile, 15)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_TransmitData($hFile, $CmdLine[2])&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	Local $sResult = _CommAPI_ReceiveData($hFile, 5000)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	_CommAPI_ClosePort($hFile)&lt;br /&gt;
	If @error Then Return SetError(@error, @extended, @ScriptLineNumber)&lt;br /&gt;
&lt;br /&gt;
	MsgBox(64, &amp;quot;Result&amp;quot;, $sResult)&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;winbatch&amp;quot;&amp;gt;&lt;br /&gt;
@echo off&lt;br /&gt;
cls&lt;br /&gt;
chcp 1252&amp;gt;nul&lt;br /&gt;
cd /d &amp;quot;%~dp0&amp;quot;&lt;br /&gt;
start Example.exe &amp;quot;COM7: BAUD=9600 PARITY=N DATA=8 STOP=1 XON=OFF ODSR=OFF OCTS=ON DTR=ON RTS=ON IDSR=OFF&amp;quot; &amp;quot;Command&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Therealhanuta</name></author>
	</entry>
</feed>