Author Topic: Обмен данными между Clickermann и другими программами  (Read 3135 times)

0 Members and 2 Guests are viewing this topic.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Сейчас реализованы три варианта. И из них рабочих только два, а по факту один.

1. Через ini.
    +: работает в обе стороны.
    -:  нужно задавать флаг готовности ответа (если разовый ответ) и постоянно читать ini дожидаясь результата. Что напрягает диск. К тому же не
        нулевая вероятность напороться на блокировку файла во время записи другой прогой, а обрабатывать эту ситуацию кликер не умеет, просто
        вываливаемся с ошибкой. Поэтому часто читать нельзя, получаем тормознутую систему. Чем чаще читаем/проверяем тем больше вероятность
        поймать фигу.

2. передать параметром при вызове по EXECUTE.
    +: "туда" всё нормально.
    -:  "обратно" в пролёте. Возвращаемся к первому варианту.

3. написать свой плагин в dll и передавать штатно через CALL
    +: наверно классно!  :D ;D
        Кликер ждет момента как отработки плагина и только потом продолжает работу.
        Возврат в переменную - это хорошо.
    -:  нужно уметь. Хрен знает на чём писать чтоб не учить С++ ради... ради чего?. Да ну его  :)
        Передаёт только целочисленные параметры. Ни float ни str... Хоть разбивай в CHAR и там собирай.
        Фиксированный тип и имя функции "execute". Т.е. вызвать из готового чужого набора уже не выйдет, печалька :'(


И что имеем в ЛизуРтате? Туда-сюда, только ini.
Раньше, вроде, писал предложение сделать обмен, но способов не видел. В голову лезли только всякие варианты с стандартным потоком вывода STDOUT. Может это вариант?

Сегодня в очередной раз глядя на утилиту AGClient очередной раз "прозрел". Можно же "туда" передавать через PostMessage. Главное, чтоб "там" ждали. Вот только опять не хватает обратки.

Предложение:
Сделать возможность приёма Кликермэном инфы, переданной по WinAPI типа PostMessage. Как ждёт и обрабатывает AGClient.
типа PostMessage($hwnd, 0x666, wParam, lParam)
Если нагрузка лишняя, то сделать команды "слушать/не слушать" и включать по надобности.
Как пришло сообщение окну, допустим 0x666 пишем wParam, lParam в переменные $_return1/2, а лучше в $_return3/4 или $_in1, $_in2

Минусы: опять только целые числа, но можно сообщением передавать только сигналы. Типа "данные обработаны, можно забирать-читать из файла".


Ну или сделать расширенный вариант - группу команд.
К примеру при получении  0x777, в wParam приходит количество последующих передаваемых кодов CHR которые нужно собрать в строку.
Допустим, получили
PostMessage($hwnd, 0x777, 5, 0) кликер ждёт следующие 5 запросов  и собирает из них строку. lParam = 0, значит передано общее количество.

PostMessage($hwnd, 0x777, 1, 65)   # A
PostMessage($hwnd, 0x777, 2, 66)   # B
PostMessage($hwnd, 0x777, 3, 67)   # C
PostMessage($hwnd, 0x777, 4, 67)   # D
PostMessage($hwnd, 0x777, 5, 67)   # E
После получения последнего выдаём в $_in1 = "ABCDE".  Можно ещё в $_in2 оповестить флагом 1, что получено и можно читать.

Понятно, что вся работа по 0x777 со стороны кликермэна не видна, просто получаем в итоге строку.

Возможно есть вариант попроще и я нагородил здесь хрень. Может можно напрямую передавать назад в кликер инфу, как в варианте с плагинами.
« Last Edit: February 28, 2017, 05:03:25 PM by Vint »


Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
о, была мысль научить его обрабатывать PostMessage. спасибо что напомнил, запишу себе.
тем более что механизм рабочий, реализован в том же AGClient