- Сообщения
- 8,672
- Репутация
- 2,483
- Версия AutoIt
- 3.3.14.5
- Версия
- 0.5
Подобных примеров и библиотек уже множество (включая и мою же Container), вот отличия у этого варианта:
Примечания:
- Стабильность
- Возможность передавать массивы (пока только 2D)
- Возможность возврата от процесса с котором вошли в интеракцию (пока только текст до 1024 байт)
- Возможность двусторонней интеракции
Примечания:
* Эта библиотека регистрирует сообщение WM_COPYDATA, если ваш скрипт или другая библиотека использует это сообщение, необходимо сделать вызов__AppInteract_WM_COPYDATA($hWnd, $iMsg, $wParam, $lParam)
из подобной функции скрипта или библиотеки.
* Не используйте задержку в функции принимающей сообщения, возврат должен быть как можно раньше.
Script1.au3:
Script2.au3:
Код:
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <Array.au3>
#include 'AppInteract.au3'
Global $iApp = 1
Global $sApp_Name = 'My App' & $iApp
Global $sSend_App_Name = 'My App' & Mod($iApp, 2) + 1
Global $sSend_Script_Name = 'Script' & Mod($iApp, 2) + 1 & '.' & (@Compiled ? 'exe' : 'au3')
Global $iGUI_Width = 600
Global $iGUI_Left = 100 + ($iGUI_Width * ($iApp - 1)) + (10 * ($iApp - 1))
_AppInteract_SetReceiver($sApp_Name, '_Receiver')
$hGUI = GUICreate(@ScriptName & ' - AppInteract Example', $iGUI_Width, 400, $iGUI_Left, 20)
GUICtrlCreateLabel('Please run ' & $sSend_Script_Name & ' and enter some data to send:', 10, 5, -1, 15)
$iEdit = GUICtrlCreateEdit(StringFormat('Send\r\nThis\r\nData\r\nTo\r\n%s', $sSend_Script_Name), 10, 20, 580, 150)
GUICtrlCreateLabel('Received:', 10, 175, -1, 15)
$iReceiver_LV = GUICtrlCreateListView('Type|Data', 10, 190, 580, 170)
GUICtrlSendMsg($iReceiver_LV, $LVM_SETCOLUMNWIDTH, 0, 285)
GUICtrlSendMsg($iReceiver_LV, $LVM_SETCOLUMNWIDTH, 1, 285)
GUICtrlCreateLabel('Send to ' & $sSend_Script_Name & ' as:', 20, 373)
$iSendStr_Bttn = GUICtrlCreateButton('String', 150, 370, 70, 20)
$iSendArr_Bttn = GUICtrlCreateButton('Array', 230, 370, 70, 20)
$iSendBin_Bttn = GUICtrlCreateButton('Binary', 310, 370, 70, 20)
GUISetState(@SW_SHOW, $hGUI)
WinSetOnTop($hGUI, '', 1)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $iSendStr_Bttn, $iSendArr_Bttn, $iSendBin_Bttn
$vData = GUICtrlRead($iEdit)
Switch $nMsg
Case $iSendArr_Bttn
$vData = StringSplit(StringStripCR($vData), @LF)
Case $iSendBin_Bttn
$vData = StringToBinary($vData)
EndSwitch
_AppInteract_Send($sSend_App_Name, $vData, @AutoItExe)
If @error Then
MsgBox(48, @ScriptName, 'Unable to send, probably ' & $sSend_Script_Name & ' is not executed!', 0, $hGUI)
EndIf
EndSwitch
WEnd
Func _Receiver($vData)
Local $sData = $vData
Local $sType = VarGetType($vData)
Switch $sType
Case 'Array'
$sData = _ArrayToString($vData, '~', -1, -1, Chr(10))
Case 'Binary'
$sData = BinaryToString($vData)
EndSwitch
GUICtrlCreateListViewItem($sType & '|' & $sData, $iReceiver_LV)
EndFunc
Script2.au3:
Код:
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <Array.au3>
#include 'AppInteract.au3'
Global $iApp = 2
Global $sApp_Name = 'My App' & $iApp
Global $sSend_App_Name = 'My App' & Mod($iApp, 2) + 1
Global $sSend_Script_Name = 'Script' & Mod($iApp, 2) + 1 & '.' & (@Compiled ? 'exe' : 'au3')
Global $iGUI_Width = 600
Global $iGUI_Left = 100 + ($iGUI_Width * ($iApp - 1)) + (10 * ($iApp - 1))
_AppInteract_SetReceiver($sApp_Name, '_Receiver')
$hGUI = GUICreate(@ScriptName & ' - AppInteract Example', $iGUI_Width, 400, $iGUI_Left, 20)
GUICtrlCreateLabel('Please run ' & $sSend_Script_Name & ' and enter some data to send:', 10, 5, -1, 15)
$iEdit = GUICtrlCreateEdit(StringFormat('Send\r\nThis\r\nData\r\nTo\r\n%s', $sSend_Script_Name), 10, 20, 580, 150)
GUICtrlCreateLabel('Received:', 10, 175, -1, 15)
$iReceiver_LV = GUICtrlCreateListView('Type|Data', 10, 190, 580, 170)
GUICtrlSendMsg($iReceiver_LV, $LVM_SETCOLUMNWIDTH, 0, 285)
GUICtrlSendMsg($iReceiver_LV, $LVM_SETCOLUMNWIDTH, 1, 285)
GUICtrlCreateLabel('Send to ' & $sSend_Script_Name & ' as:', 20, 373)
$iSendStr_Bttn = GUICtrlCreateButton('String', 150, 370, 70, 20)
$iSendArr_Bttn = GUICtrlCreateButton('Array', 230, 370, 70, 20)
$iSendBin_Bttn = GUICtrlCreateButton('Binary', 310, 370, 70, 20)
GUISetState(@SW_SHOW, $hGUI)
WinSetOnTop($hGUI, '', 1)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $iSendStr_Bttn, $iSendArr_Bttn, $iSendBin_Bttn
$vData = GUICtrlRead($iEdit)
Switch $nMsg
Case $iSendArr_Bttn
$vData = StringSplit(StringStripCR($vData), @LF)
Case $iSendBin_Bttn
$vData = StringToBinary($vData)
EndSwitch
_AppInteract_Send($sSend_App_Name, $vData, @AutoItExe)
If @error Then
MsgBox(48, @ScriptName, 'Unable to send, probably ' & $sSend_Script_Name & ' is not executed!', 0, $hGUI)
EndIf
EndSwitch
WEnd
Func _Receiver($vData)
Local $sData = $vData
Local $sType = VarGetType($vData)
Switch $sType
Case 'Array'
$sData = _ArrayToString($vData, '~', -1, -1, Chr(10))
Case 'Binary'
$sData = BinaryToString($vData)
EndSwitch
GUICtrlCreateListViewItem($sType & '|' & $sData, $iReceiver_LV)
EndFunc
- Автор
- G.Sandler
- Источник
- Ссылка на источник
Вложения
Последнее редактирование: