inververs
AutoIT Гуру
- Сообщения
- 2,135
- Репутация
- 465
AutoIt: Production Version: 3.3.8.1
Версия: 1.0
Категория: Интеракция, Процессы, Сообщений, Коммуникация
Описание: UDF позволяет организовать коммуникацию между вашими приложениями.
Сообщения отсылаются методом POST сразу всем окнам, которые зарегистрировали одинаковый идентификатор.
Функция может пригодиться в тех случаях, когда запускаются несколько копий приложений для синхронизации действий, или же требуется наладить связь между приложениями которые должны получать сообщения одновременно.
Т.к методом Post нельзя отослать текст, строку, массив и т.п., то Вы должны придумать, как приложение будет реагировать на сообщения. Можно отсылать числа, которые будет понятны только вам, или же можно отсылать HWND контрола, в котором будет находиться нужный текст, или же это может быть указатель на общий блок памяти и т.д.
Все сообщения должны иметь тип PTR.
Вызовите где-нибудь в начале вашего скрипта _Communication_Init и передайте 2 параметра:
[list type=decimal]
[*]HWND окна вашей программы. Если окна нет, то создайте скрытое.
[*]Имя функции, которая будет вызываться при приеме сообщений.
[/list]
Функция должна принимать 2 параметра: 1) HWND окна, которое прислало сообщение, 2) Само сообщение.
Для отсылки сообщений вызывайте функцию _Communication_Send(Данные)
Пример ниже показывает, как подключить библиотеку и отсылать текст. Идея в том, что отсылается HWND контрола содержащий текст.
Запустите пример несколько раз, что бы открылось много копий, введите нужный текст и нажмите кнопку Send.
Код/Пример:
Файл: communication.au3
История версий:
Автор(ы):Inververs
Версия: 1.0
Категория: Интеракция, Процессы, Сообщений, Коммуникация
Описание: UDF позволяет организовать коммуникацию между вашими приложениями.
Сообщения отсылаются методом POST сразу всем окнам, которые зарегистрировали одинаковый идентификатор.
Функция может пригодиться в тех случаях, когда запускаются несколько копий приложений для синхронизации действий, или же требуется наладить связь между приложениями которые должны получать сообщения одновременно.
Т.к методом Post нельзя отослать текст, строку, массив и т.п., то Вы должны придумать, как приложение будет реагировать на сообщения. Можно отсылать числа, которые будет понятны только вам, или же можно отсылать HWND контрола, в котором будет находиться нужный текст, или же это может быть указатель на общий блок памяти и т.д.
Все сообщения должны иметь тип PTR.
Вызовите где-нибудь в начале вашего скрипта _Communication_Init и передайте 2 параметра:
[list type=decimal]
[*]HWND окна вашей программы. Если окна нет, то создайте скрытое.
[*]Имя функции, которая будет вызываться при приеме сообщений.
[/list]
Функция должна принимать 2 параметра: 1) HWND окна, которое прислало сообщение, 2) Само сообщение.
Для отсылки сообщений вызывайте функцию _Communication_Send(Данные)
Пример ниже показывает, как подключить библиотеку и отсылать текст. Идея в том, что отсылается HWND контрола содержащий текст.
Запустите пример несколько раз, что бы открылось много копий, введите нужный текст и нажмите кнопку Send.
Код/Пример:
Код:
#include 'communication.au3'
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 513, 407, 283, 265)
$Edit1 = GUICtrlCreateEdit("", 8, 8, 497, 361)
$Input1 = GUICtrlCreateInput("", 8, 376, 400, 21)
$Button1 = GUICtrlCreateButton("Send", 424, 376, 75, 25, $BS_DEFPUSHBUTTON)
GUISetState(@SW_SHOW)
WinSetTitle($Form1, '', $Form1)
;Подключаем коммуникацию. Функция __DataRes будет вызываться при приходе сообщений.
;Функция должна принимать 2 параметра
_Communication_Init($Form1, '__DataRes')
$hCtrl = GUICtrlGetHandle($Input1)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
;Отсылаем HWND контрола в котором содержится текст
_Communication_Send($hCtrl)
EndSwitch
WEnd
Func __DataRes($hWndFrom = 0, $sMsg = 0)
;$hWndFrom - сообщение от этого окна
;Само сообщение
;Т.к мы в сообщение отсылаем HWND контрола, то получим из него текст.
$sText = ControlGetText($hWndFrom, '', $sMsg)
GUICtrlSetData($Edit1, 'Сообщение от ' & $hWndFrom & ': ' & $sText & @CRLF, 1)
EndFunc ;==>__DataRes
Файл: communication.au3
История версий:
1.0 Первая версия
Автор(ы):Inververs