Jump to content

Sending data via Serial port using Kernel32.dll

Recommended Posts


Hi all,

I got this code and would like to be able to change Baud Rate and instead of sending character by character i would like to be able (if possible) to send whole string. But i don't know how to change it.

I am taking input from file and processing whole line (this is done in FilesHandling.au3).

To execute this i am just calling SendData("FileName", int) in "main" script.

Any help very appreciated.

#include <WinAPI.au3>
 #include <Array.au3>
 #include "FilesHandling.au3"

    ;init DLL function, we need handle to call the function
    $h = DllCall("Kernel32.dll", "hwnd", "CreateFile", "str", "\\.\COM19", "int", BitOR($GENERIC_READ,$GENERIC_WRITE), "int", 0, "ptr", 0, "int", $OPEN_EXISTING, "int", $FILE_ATTRIBUTE_NORMAL, "int", 0)

Func SendData($FileName, $LineNumber)
    ;string to be send
    $c = readFile($FileName, $LineNumber)
    $cLenght = StringLen($c)
    $aArray = StringSplit($c, "")
    ;_ArrayDisplay($aArray, "", Default, 64)

    For $i = 1 To $cLenght
        writeChar($handle, $aArray[$i], $cLenght)

    ;move to next line
    writeChar($handle, @CR,1)

;write a single char
func writeChar($handle,$c,)
    $stString = DLLStructCreate("char str")
    $lpNumberOfBytesWritten = 0
    DllStructSetData($stString, 1, $c)
    $res = _WinAPI_WriteFile($handle, DllStructGetPtr($stString, "str"), 1,$lpNumberOfBytesWritten)
    if ($res<>true) then
       ConsoleWrite ( _WinAPI_GetLastErrorMessage() & @LF)


Edited by cheeroke

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • XinYoung
      By XinYoung
      Hello again,
      I'm trying to use the FileMove function to rename a bunch of text files.
      Some of the files have "_1" at the end of their name, for example, "File123_1.txt". I want to remove the "_1" so it would become "File123.txt".
      What I currently have...
              FileMove($sSource & "\*_1.txt", $sDestination & "\*.txt")
      But since I'm using a wildcard, it doesn't appear to be working. I think it's just replacing .txt with .txt. Am I going about this the wrong way? How can I use wildcards and still accomplish this?
      Any help is greatly appreciated ^__^
    • ur
      By ur
      I have date in the string format as "DD-MM-YYYY".
      I need to get yesterday's date from it.
      I tried converting this from _DateTimeFormat but not working.
      Is there any direct UDF available to get this.?
    • rkr
      By rkr
      Hi, i want to read a particular string from a text file using autoit. i wish to read it without explicitly opening the text file. the copied string should be then transferred to an excelbook (again, no need to explicitly open the excel book)... 

      with reference to my screenshot attached, my input to the  'script'' is going to be 0017-0008, and the script should copy the highlighted two lines from the input file to excel

    • FroVN
      By FroVN
      Hi, i have a problem :" can't set the name of file with a special character like: \;/;";|;...  have anyway to short the StringInSrt and Stringreplace? i am using this code but too long
         if StringInStr($title,'\') or StringInStr($title,'/') or StringInStr($title,':') or StringInStr($title,'*') or StringInStr($title,'?') or StringInStr($title,'"') or StringInStr($title,'<') or StringInStr($title,'>') or StringInStr($title,'|') Then
    • JustinZandee
      By JustinZandee
      I need a random string generator which creates 15 letters/numbers.
      How can I make that?

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.