Avec les sorties standards :
(Utilisez ALT + j pour envoyer du texte à script.exe)
► Afficher le texte
Code : Tout sélectionner
#include <Constants.au3>
Global $script = Run("script.exe", _
@ScriptDir, _
@SW_SHOW, _
$STDERR_CHILD + $STDOUT_CHILD + $STDIN_CHILD)
If @error Then
MsgBox(0, "Erreur", "Impossible d'exécuter script.exe !")
Exit -1
EndIf
Global $r
Opt("OnExitFunc", "quitte")
HotKeySet("!j", "envoieDonnees") ; ALT + j
While 1
$r = StdoutRead($script)
If @error Then ExitLoop
If $r Then MsgBox(0, "> StdoutRead : " & @ScriptName, $r)
$r = StderrRead($script)
If @error Then ExitLoop
If $r Then MsgBox(0, "StderrRead : " & @ScriptName, $r)
Sleep(100)
WEnd
Func envoieDonnees()
StdinWrite($script, InputBox("Données à envoyer :", ""))
EndFunc ;==>envoieDonnees
Func quitte()
ProcessClose($script)
EndFunc ;==>quitte
► Afficher le texte
Code : Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=script.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
While 1
$r = ConsoleRead()
If $r Then
MsgBox(0, "ConsoleRead : " & @ScriptName, $r)
ConsoleWrite("La donnée a bien été reçue par " & @ScriptName & " : " & $r)
ConsoleWriteError("La donnée a bien été reçue par (envoie avec ConsoleWriteError) " & @ScriptName & " : " & $r)
EndIf
Sleep(100)
WEnd
(Script qui recevra les données.)
► Afficher le texte
Code : Tout sélectionner
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
Global Const $tagCOPYDATASTRUCT = _
"ulong_ptr dwData;" & _
"dword cbData;" & _
"ptr lpData;"
Global $msg
GUIRegisterMsg($WM_COPYDATA, "WM_COPYDATA")
GUICreate("Exemple de communication inter-processus")
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
GUIDelete()
; http://msdn.microsoft.com/en-us/library/ms648710(VS.85).aspx
Func WM_COPYDATA($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam, $ilParam
; on crée une structure qui va contenir les données pointées par le pointeur de structure $lParam
Local $copydatastruct = DllStructCreate($tagCOPYDATASTRUCT, $ilParam)
; on récupère la taille des données
Local $taille = DllStructGetData($copydatastruct, "cbData")
; on récupère le pointeur qui pointe vers l'adresse qui contient les données
Local $ptrDonnees = DllStructGetData($copydatastruct, "lpData")
; on crée une structure qui va contenir les données pointées par le pointeur $ptrDonnees
Local $structDonnees = DllStructCreate("char[" & $taille & "]", $ptrDonnees)
MsgBox(0, "", _
"Handle de la fenêtre qui a envoyée les données : " & $iwParam & @CRLF & _
"Données reçues (dwData) : " & DllStructGetData($copydatastruct, "dwData") & @CRLF & _
"Taille des données pointées par lpData (cbData) : " & $taille & @CRLF & _
"Données reçues (lpData) : " & DllStructGetData($structDonnees, 1) & @CRLF & _
"Pointeur des données : " & $ptrDonnees & @CRLF,2)
$copydatastruct = 0
$structDonnees = 0
EndFunc ;==>WM_COPYDATA
► Afficher le texte
Code : Tout sélectionner
; http://msdn.microsoft.com/en-us/library/ms649011(VS.85).aspx
#include <SendMessage.au3>
#include <WindowsConstants.au3>
Global Const $NULL = ""
Global Const $tagCOPYDATASTRUCT = _
"ulong_ptr dwData;" & _
"dword cbData;" & _
"ptr lpData;"
Global $copydatastruct = DllStructCreate($tagCOPYDATASTRUCT)
Global $hwnd
Global $donnees_dwData = 1 ; données à envoyer
Global $donnees_lpData = "meuuuhhh..." ; données à envoyer (peuvent être nulles)
Global $taille = StringLen($donnees_lpData)
Global $structDonnees
; on crée la structure dans laquelle on stocke les données (si non nulles),
; puis on crée le pointeur vers celle-ci
If $donnees_lpData <> $NULL Then
$structDonnees = DllStructCreate("char[" & $taille & "]")
DllStructSetData($structDonnees, 1, $donnees_lpData)
$ptrStructDonnees = DllStructGetPtr($structDonnees)
Else
$ptrStructDonnees = $NULL
EndIf
Do
$hwnd = WinGetHandle("Exemple de communication inter-processus")
Sleep(100)
Until Not @error
DllStructSetData($copydatastruct, "dwData", $donnees_dwData) ; données
DllStructSetData($copydatastruct, "cbData", $taille) ; taille
DllStructSetData($copydatastruct, "lpData", $ptrStructDonnees) ; pointeur
_SendMessage( _
$hwnd, _
$WM_COPYDATA, _
WinGetHandle(AutoItWinGetTitle()), _
DllStructGetPtr($copydatastruct))