Author Topic: SENDMESSAGE  (Read 10031 times)

0 Members and 2 Guests are viewing this topic.

Kryak

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
SENDMESSAGE
« on: June 10, 2019, 11:26:25 PM »
Ребят, как при помощи SENDMESSAGE отправить клик по элементу?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: SENDMESSAGE
« Reply #1 on: June 11, 2019, 07:36:28 AM »
Code: (clickermann) [Select]
SUB(SM_Lclick, $xsm,$ysm,$hwsm) // в начале скрипта
   SENDMESSAGE($hwsm,0x0201,0x0001,$xsm+($ysm*65536))//LDOWN
   WAITMS(50)
   SENDMESSAGE($hwsm,0x0202,0x0000,$xsm+($ysm*65536))//LUP
   WAITMS(50)
END_SUB

// вызов подпрограммы клика там где нужно
SM_Lclick(271,35,$_hwnd) // x,y,HWND

HALT

Kryak

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Re: SENDMESSAGE
« Reply #2 on: June 11, 2019, 09:07:04 AM »
Спасибо!

Kryak

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Re: SENDMESSAGE
« Reply #3 on: June 11, 2019, 09:20:34 AM »
А "271,35", это внутренние координаты того элемента, по которому кликаем, я так понимаю?

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: SENDMESSAGE
« Reply #4 on: June 18, 2019, 08:20:38 AM »
А такой вопрос у меня, ребят... А текст как-то можно передать через все это дело? Ну, и принять соответственно...
Я не ду... Потому и не бу...

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: SENDMESSAGE
« Reply #5 on: June 19, 2019, 03:40:26 PM »
Что - никак...?
Я не ду... Потому и не бу...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: SENDMESSAGE
« Reply #6 on: June 19, 2019, 04:31:59 PM »
Как последовательность кодов. Только нужно выбрать код обозначающий конец последовательности.
Куда передавать то?


Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: SENDMESSAGE
« Reply #7 on: June 19, 2019, 05:52:59 PM »
Куда передавать то?
Ну, как бы два варианта хотелось бы понять. 1 - передача в другую программу (приоритетный вопрос). Правда потом наверно придется рыть инет в поиске ответов на вопрос - как ПРИНЯТЬ  текст... 2 - передача из кликера в кликер.
Я не ду... Потому и не бу...

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: SENDMESSAGE
« Reply #8 on: June 19, 2019, 05:58:51 PM »
Могу объяснить задачу... К примеру, я написал сервер, который может принимать сообщения от клиентов. Клиенты я так же написал. В каждой виртуалке, в которой я запускаю кликер, запускается клиент, который должен "общаться" с кликером. Этот клиент так же общается с сервером, обмениваясь сообщениями. То есть... С сервера может быть послана команда всем клиентам - "Первая машина - стоп". Клиент в первой виртуальной машине ловит это сообщение и передает кликеру (который запущен в этой же машине) команду - "Стоп", и кликер отвечает клиенту - "Остановка", и останавливается. А клиент ловит сообщение от кликера и отвечает серверу - "Первая машина - остановлена".
Я не ду... Потому и не бу...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: SENDMESSAGE
« Reply #9 on: June 19, 2019, 08:23:04 PM »
А нафига текст. Проще коды передавать.
Там же ограниченное число команд будет. Создать словарик 1-старт, 2-стоп, 3-самоубиться, 4-запуск потока D и т.д.
Но можно и текст, лишняя сложность. Вот если кликер должен какие-то донные принимать или отдавать, тогда да, есть смысл.


Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: SENDMESSAGE
« Reply #10 on: June 19, 2019, 10:13:04 PM »
Вот если кликер должен какие-то донные принимать или отдавать, тогда да, есть смысл.
Под данными ты имеешь в виду файлы? Я на это уже не замахиваюсь... Но... Кликер может сделать скрин и отправить команду клиенту, чтобы ТОТ отправил этот скрин серверу. Но это уже другая песня и она более осуществима. А вот насчет передачи кодов можно поподробнее...? К примеру, мне нужно передать от кликера клиенту - 1. Это как будет выглядеть?
Я не ду... Потому и не бу...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: SENDMESSAGE
« Reply #11 on: June 20, 2019, 06:54:00 AM »
будет выглядеть как POSTMESSAGE...  :D
Данные любые текстовые. Не файлы. Имя аккаунта, например, его уровень жизни, или имя моба поблизости или что собрали, координаты, сообщения в чат и т.п.
Передаёшь ты к примеру команду 'всем собраться в координатах ...'.


Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: SENDMESSAGE
« Reply #12 on: June 20, 2019, 09:18:06 AM »
будет выглядеть как POSTMESSAGE...  :D
Code: (clickermann) [Select]
POSTMESSAGE
HALT



Ты просто не понял ) Я в POSTMESSAGE не в зуб ногой, как я вас тут когда-то мучал с вопросом о переменной. И сколько я инет по этой теме не рою - никак понять не могу. Мне досконально примерами разжевать надо...
Я не ду... Потому и не бу...

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: SENDMESSAGE
« Reply #13 on: June 20, 2019, 10:08:14 AM »
Объясню ситуацию... Да - я все со своими пресловутыми виртуалками + дистанционное управление скриптами в них...
У меня запущено 15 виртуалок и в каждой из них запущен кликер, в котором скрипт сам круглые сутки запускает игру при дисконектах, заходит на нужного перса, входит в игру и соответственно выполняет действия в игре. Все эти 15 персов (в 15-ти виртуалках) должны действовать сообща. То есть - не каждый действует сам по себе - по своей программе, а они "общаются" между собой и действуют исходя из ситуации. Это общение у меня настроено через ини-файл, который находится в папке хостового компьютера, а в виртуалках эта папка настроена, как сетевая. И все бы ничего, но проект расширяется - добавляются новые фишки, команды и так далее. В скрипте уже 108 обращений к этому ини-файлу, будь то INIWRITE или INIREAD. СТО ВОСЕМЬ раз скрипт таскает этот ини-файл через сеть... Если бы можно было, как в других программах - один раз открыть этот файл и взять из него все нужные данные, то я прописал бы это в самом начале скрипта, но у нас на каждый INIWRITE и INIREAD кликер открывает и закрывает файл, так что смысла в том, чтобы весь файл считывать в начале скрипта, а потом работать с полученной информацией, я не вижу. Один хрен, что так, что так на получение всей этой инфы будет уходить драгоценное время и мощность процессора, так как кликер 108 раз протащит ини-файл через сеть, 108 раз его откроет и 108 раз закроет при любом раскладе. И вот моя задача - наладить "общение" каждого кликера в виртуалке с клиентом (написанным на delphi и который так же будет запущен в каждой виртуалке), через POSTMESSAGE (то есть - не используя никакие файлы для этого), а эти клиенты уже в свою очередь будут "общаться" с сервером (который будет запущен на хосте уже) через интернет, обмениваясь короткими сообщениями. Если бы кликер не агрился на совместное использование ини-файла с посторонней программой, то можно было бы обойтись и без этого POSTMESSAGE. В таком случае я бы просто устроил общение кликера с клиентом через ини-файл, который лежал бы уже в обычной папке на каждой виртуалке, но в виду того, что при таком совместном использовании у нас выскакивают ошибки в кликере, такой вариант отпадает...
Вот в общем я и пытаюсь разобраться с этим POSTMESSAGE... Или можно еще что-то придумать...? Помогите плиз... Я с этой темой уже давно мучаюсь...
Добавлю, что управление скриптами через telegram у меня уже налажено - с эти мне помогать не нужно ) Скрипты так же шлют в telegram оповещения, об интересующих меня ситуациях. Это все у меня работает. Так что с этим, если кому надо, могу помочь.
« Last Edit: June 20, 2019, 10:20:54 AM by Hito »
Я не ду... Потому и не бу...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: SENDMESSAGE
« Reply #14 on: June 20, 2019, 04:07:16 PM »
Давай по порядку. Передаём сообщение от кликера твоему клиенту.

POSTMESSAGE(hwnd, message, wParam, lParam)
 
где
hwnd hwnd твоего клиента (можно искать по названию или другим способом, это как всегда).
messageкод сообщения на отдельных кодах будут висеть разные действия.
wParam, lParam   передаваемые параметры. Твои два 32 битных числа (в 32 битной винде) которые ты можешь передать.

message
код сообщения. Часть кодов используется системой, поэтому их лучше не использовать
Диапазон кодов используемых системой:
;~ Стандартные сообщения   от  0   до  0x03FF (1023)

Диапазон кодов для использования локально (в одном приложении) хотя работать всё будет, но не всегда:
;~ Локальные сообщения       от  0x0400  (1024)  до  0x7FFF (32767)

То, что нам надо!
;~ Глобальные сообщения     от  0xC000 (49152)  до  0xFFFF (65535)


У каждого системного сообщения параметры wParam, lParam свои и передаётся там то, что нужно именно этому сообщению (в своих мы используем то, что нужно нам)
Пример
POSTMESSAGE($_hwnd,0x0301,0,0) // передаём окну код 0x0301 - скопировать
POSTMESSAGE($_hwnd,0x0302,0,0) // передаём окну код 0x0302 - вставить
wParam, lParam равны 0 и не используются

//Отправляем сообщение окну о нажатой левой кнопке мыши
POSTMESSAGE($HWND, 0x0201, 1, $x + ($y*65536))
0x0201 - код нажатия ЛКМ
lParam содержит в одном числе координаты, куда именно кликаем. Координаты запихиваются так $x + ($y*65536))

Наш пример.
Так как же нам использовать. Да вот так берём и шлём сообщения, а клиент учим понимать их правильно.
Как писал выше кода будем использовать в диапазоне от 0xC000 (49152)  до  0xFFFF (65535)
Вот хотим мы передать клиенту ответ "машина запущена" или "машина остановлена"
Назначим кода

0xD001  (53249 в десятеричной) - машина запущена
0xD002  (53250)                            - машина остановлена
wParam                                         - номер машины
$_hwnd - дискриптор окна клиента

Code: (clickermann) [Select]
POSTMESSAGE($_hwnd , 0xD001, 3, 0) // запущена машина №3
можно во втором параметре передавать время действия в UNIX

Code: (clickermann) [Select]
POSTMESSAGE($_hwnd , 0xD002, 2, $_time_t) // остановлена машина №2, время текущее

Как делфи не знаю, знаю как в AutoIT если на нём сделана принимающая сторона
На код сообщения можно назначить свою функцию
Code: (php) [Select]
GUIRegisterMsg(0xD001, '_StartMashine')
GUIRegisterMsg(0xD002, '_StopMashine')

Func _StartMashine($hWnd, $iMsg, $iwParam, $ilParam)
    ConsoleWrite('Машина № ' & $iwParam & ' запущена' @CRLF)
EndFunc

Func _StopMashine($hWnd, $iMsg, $iwParam, $ilParam)
    ConsoleWrite('Машина № ' & $iwParam & ' остановлена в ' & $ilParam & @CRLF)
EndFunc