Jump to content

Communicating multiple Autoit.exe Scripts


arryo
 Share

Recommended Posts

Hiii,

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?

Link to comment
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:

test.au3:

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

Run("test2.exe")

_MsgRegister('logincheck1', 'lol1')


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



While True
Sleep(1000)
_MsgSend("logincheck2", "lol2" )
WEnd

test2.au3:

#Include <Messages.au3>

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


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

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


While True
WEnd

(ofc i compiled them).

Link to comment
Share on other sites

  • Moderators

arryo,

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 ****
#AutoIt3Wrapper_UseUpx=n
#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
Else
    $sThis_Win_Title = "First Instance"
    $sThat_Win_Title = "Second Instance"
    $iY = 100
EndIf

; 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)

GUIRegisterMsg($WM_COPYDATA, "_WM_COPYDATA")

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ; Send close message to other window
            _SendData(WinGetHandle($sThat_Win_Title), "@exit")
            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)
    EndSwitch

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

WEnd

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

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

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

 

Link to comment
Share on other sites

Script1.au3

#Include <Messages.au3>

_MsgRegister('Script1', '_MyReceiver1')

$i = 0

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

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

Script2.au3

#Include <Messages.au3>

_MsgRegister('Script2', '_MyReceiver2')

$i = 0

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

Func _MyReceiver2($sMessage)
    MsgBox(0, 'Script2', $sMessage, 1)
EndFunc   ;==>_MyReceiver2
Link to comment
Share on other sites

Hi,

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)

Mega

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

Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...