Автор Тема: Еще один способ итеракции процессов  (Прочитано 6379 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2694
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Собственно пример взят непосредственно из WinAPIEx.au3. На мой взгляд, это один из самых простых способов обмена данными между процессами.

Код: AutoIt [Выделить]
#NoTrayIcon

#Include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)
Opt('WinWaitDelay', 0)

Global Const $Title = '_WinAPI_MapViewOfFile' & ChrW(160)

If Not $CmdLine[0] Then
    If WinExists($Title) Then
        Exit
    EndIf
    For $i = 1 To 2
        If Not @compiled Then
            Run(@AutoItExe & ' "' & @ScriptFullPath & '" /' & $i)
        Else
            Run(@AutoItExe & ' /' & $i)
        EndIf
        Sleep(500)
    Next
    Exit
EndIf

Opt('TrayIconHide', 0)

Switch $CmdLine[1]
    Case '/1'
        _Sender()
    Case '/2'
        _Receiver()
    Case Else
        Exit
EndSwitch

Func _Receiver()

    Local $hMapping, $pAddress, $tData, $Text

    $hMapping = _WinAPI_OpenFileMapping('MyFileMapping')
    If @error Then
        Return
    EndIf

    $pAddress = _WinAPI_MapViewOfFile($hMapping)
    $tData = DllStructCreate('wchar[1024]', $pAddress)
    While WinWait($Title, '', 1)
        Sleep(200)
        $Text = DllStructGetData($tData, 1)
        DllStructSetData($tData, 1, '')
        If $Text Then
            MsgBox(64, $Title, $Text)
        EndIf
    WEnd
    _WinAPI_UnmapViewOfFile($pAddress)
    _WinAPI_CloseHandle($hMapping)
EndFunc   ;==>_Receiver

Func _Sender()

    Local $hMapping, $pAddress, $tData, $Text

    $hMapping = _WinAPI_CreateFileMapping(-1, 2048, 'MyFileMapping')
    If (@error) Or (@extended) Then
        MsgBox(16, 'Error', 'Unable to create file mapping.')
        Return
    EndIf

    $pAddress = _WinAPI_MapViewOfFile($hMapping)
    $tData = DllStructCreate('wchar[1024]', $pAddress)
    While WinWaitClose($Title)
        $Text = StringStripWS(InputBox($Title, 'Type some text message.', '', '', -1, 171), 3)
        If Not $Text Then
            ExitLoop
        EndIf
        DllStructSetData($tData, 1, $Text)
        If Not WinWait($Title, '', 1) Then
            ExitLoop
        EndIf
    WEnd
    _WinAPI_UnmapViewOfFile($pAddress)
    _WinAPI_CloseHandle($hMapping)
EndFunc   ;==>_Sender



Думай, прежде чем говорить.

Русское сообщество AutoIt

Еще один способ итеракции процессов
« Отправлен: Сентябрь 25, 2010, 02:16:09 »

Оффлайн Luke [?]

  • Новичок
  • *
  • Сообщений: 64
  • Репутация: 14
  • Пол: Мужской
    • Награды
Re: Еще один способ итеракции процессов
« Ответ #1, Отправлен: Октябрь 16, 2010, 20:32:04 »
Надо будет почаще скачивать WinAPIEx.au3 , в старой версии этих функций небыло, приходилось делать через DllCall, спасибо. Для полноты просьба добавить функции синхронизации типа OpenEvent() и т.п.
« Последнее редактирование: Октябрь 16, 2010, 23:50:30 от Luke »

Оффлайн mrsoros [?]

  • Новичок
  • *
  • Сообщений: 18
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Еще один способ итеракции процессов
« Ответ #2, Отправлен: Март 22, 2017, 14:40:30 »
Что бы работало надо обязательно чтобы у обоих процессов был один родитель? Хочу обмениваться сообщениями между двумя скриптами. Не получается написать клиента и сервер.

Русское сообщество AutoIt

Re: Еще один способ итеракции процессов
« Ответ #2 Отправлен: Март 22, 2017, 14:40:30 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
54 Ответов
30917 Просмотров
Последний ответ Август 08, 2016, 20:12:30
от Alexey
32 Ответов
129799 Просмотров
Последний ответ Июль 14, 2015, 13:48:42
от ckret
4 Ответов
2454 Просмотров
Последний ответ Ноябрь 02, 2011, 22:55:00
от Max98
7 Ответов
3810 Просмотров
Последний ответ Сентябрь 17, 2011, 00:34:45
от Yashied
7 Ответов
3192 Просмотров
Последний ответ Май 29, 2012, 23:53:46
от CreatoR
1 Ответов
1897 Просмотров
Последний ответ Сентябрь 23, 2013, 20:50:21
от SlavaS
1 Ответов
678 Просмотров
Последний ответ Декабрь 06, 2015, 08:14:04
от Yashied
2 Ответов
875 Просмотров
Последний ответ Май 14, 2016, 18:10:56
от firex
9 Ответов
893 Просмотров
Последний ответ Август 11, 2017, 23:01:39
от Pennon
4 Ответов
246 Просмотров
Последний ответ Август 02, 2017, 11:53:55
от maes_tro