Sign in to follow this  
Followers 0

Communicating multiple Autoit.exe Scripts

8 posts in this topic


How can I script that multiple (at the same time) running autoit scripts can communicate with each other? Cause I made an Autoit-GUI and when I do an action with that, then it won't do anything until the action is finished.

The goal is:

1. Start "Main Autoit.exe" -> GUI

Example: "Start" on Main Autoit.exe clicked -> 2. Start "lolbot Autoit.exe" -> sets, for example, opens firefox, sets $x = htmlcode of google page.

3. "Main Autoit.exe" recognizes when "lolbot Autoit.exe" is finished and then gets the variable $x.

4. Closes "lolbot Autoit.exe" & updates "Main Autoit.exe" with the new informations.

How is that possible?

Share this post

Link to post
Share on other sites

Hmm, could you please show me a simple example? =( The example in your script is a bit to complicated for me.

My 2 scripts:


#Include <Messages.au3>
#Include <Array.au3>


_MsgRegister('logincheck1', 'lol1')

func lol2()
Msgbox(1, "lol", "received something. test2")

While True
_MsgSend("logincheck2", "lol2" )


#Include <Messages.au3>

$lol = _MsgRegister('logincheck2', 'lol2')

func _Receiver($lol)
Msgbox(1, "lol", "received something.")

func lol2()
Msgbox(1, "lol", "received something. test2")

While True

(ofc i compiled them).

Share this post

Link to post
Share on other sites


I developed this from Yashied's script so I could understand what was going on myself. :) Just compile it and then run it twice:

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
; Based on code from Yashied

#include <GUIConstantsEx.au3>

Opt("WinTitleMatchMode", 3)

Global Const $WM_COPYDATA = 0x004A
Global $sThis_Win_Title, $sThat_Win_Title
Global $iY, $hInput, $hButton, $hLabel
Global $sMsg_To_Send, $sMsg_Rcvd, $sMsg_Set = ""

; Set GUI title
If WinExists("First Instance") Then
    If WinExists("Second Instance") Then Exit
    $sThis_Win_Title = "Second Instance"
    $sThat_Win_Title = "First Instance"
    $iY = 300
    $sThis_Win_Title = "First Instance"
    $sThat_Win_Title = "Second Instance"
    $iY = 100

; Create GUI
GUICreate($sThis_Win_Title, 400, 150, 100, $iY)

$hInput = GUICtrlCreateInput("", 20, 20, 360, 20)
$hButton = GUICtrlCreateButton("Send", 160, 60, 80, 30)
$hLabel = GUICtrlCreateLabel("", 20, 100, 360, 20)



While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ; Send close message to other window
            _SendData(WinGetHandle($sThat_Win_Title), "@exit")
        Case $hButton
            ; Send message to other window
            $sMsg_To_Send = GUICtrlRead($hInput)
            $hWnd = WinGetHandle($sThat_Win_Title)
            If (Not @error) And ($sMsg_To_Send <> "") Then _SendData($hWnd, $sMsg_To_Send)

    ; Check messages received
    If $sMsg_Rcvd = "@exit" Then Exit
    If $sMsg_Rcvd <> $sMsg_Set Then
        GUICtrlSetData($hLabel, $sMsg_Rcvd)
        $sMsg_Set = $sMsg_Rcvd


Func _SendData($hWnd, $sData)

    Local $tCOPYDATA, $tMsg

    $tMsg = DllStructCreate("char[" & StringLen($sData) + 1 & "]")
    DllStructSetData($tMsg, 1, $sData)
    $tCOPYDATA = DllStructCreate("dword;dword;ptr")
    DllStructSetData($tCOPYDATA, 2, StringLen($sData) + 1)
    DllStructSetData($tCOPYDATA, 3, DllStructGetPtr($tMsg))
    $Ret = DllCall("user32.dll", "lparam", "SendMessage", "hwnd", $hWnd, "int", $WM_COPYDATA, "wparam", 0, "lparam", DllStructGetPtr($tCOPYDATA))
    If (@error) Or ($Ret[0] = -1) Then Return 0
    Return 1

EndFunc   ;==>_SendData

Func _WM_COPYDATA($hWnd, $msgID, $wParam, $lParam)

    Local $tCOPYDATA = DllStructCreate("dword;dword;ptr", $lParam)
    Local $tMsg = DllStructCreate("char[" & DllStructGetData($tCOPYDATA, 2) & "]", DllStructGetData($tCOPYDATA, 3))
    $sMsg_Rcvd = DllStructGetData($tMsg, 1)
    Return 0

EndFunc   ;==>_WM_COPYDATA


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:


ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area


Share this post

Link to post
Share on other sites


#Include <Messages.au3>

_MsgRegister('Script1', '_MyReceiver1')

$i = 0

While 1
    If _IsReceiver('Script2') Then
        $i += 1
        _MsgSend('Script2', String($i))

Func _MyReceiver1($sMessage)
    MsgBox(0, 'Script1', $sMessage, 1)
EndFunc   ;==>_MyReceiver1


#Include <Messages.au3>

_MsgRegister('Script2', '_MyReceiver2')

$i = 0

While 1
    If _IsReceiver('Script1') Then
        $i += 1
        _MsgSend('Script1', String($i))

Func _MyReceiver2($sMessage)
    MsgBox(0, 'Script2', $sMessage, 1)
EndFunc   ;==>_MyReceiver2

Share this post

Link to post
Share on other sites


you can also write something into e.g. a file and loop whether the status is written, or let the scripts communicate via tcp. (see Chat)


Scripts & functions Organize Includes Let Scite organize the include files

Yahtzee The game "Yahtzee" (Kniffel, DiceLion)

LoginWrapper Secure scripts by adding a query (authentication)

_RunOnlyOnThis UDF Make sure that a script can only be executed on ... (Windows / HD / ...)

Internet-Café Server/Client Application Open CD, Start Browser, Lock remote client, etc.

MultipleFuncsWithOneHotkey Start different funcs by hitting one hotkey different times

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
Sign in to follow this  
Followers 0