Author Topic: SENDMESSAGE  (Read 10131 times)

0 Members and 2 Guests are viewing this topic.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: SENDMESSAGE
« Reply #15 on: June 20, 2019, 04:28:25 PM »
Вот как кликер принимает сообщения:
Code: (clickermann) [Select]
#name "GETMESSAGE test2"
// Author: Vint
// Version: 0.1 (20.06.2019)
// Скрипт для Clickermann v4.13.14

LOGCLEAR

// поток слушающий сообщение
THREAD(mess, 1)
   GETMESSAGE($wp, $lp, $isnew)
   IF($isnew != 0)
      LOGWRITE("wParam:", $wp, "  lParam:", $lp)
   END_IF
   WAITMS(200)
END_THREAD


// эмулируем отправку сообщения. Шлём сами себе
// кликер принимает только на один код прописанный в конфиге
// msg_hook = 1024
// по нормальному нужно поменять на любой из диапазона 0xC000 (49152)  до  0xFFFF (65535)
// но будет и так работать

// через 1 сек шлём  wParam = 123, lParam = 321
WAIT(1)
POSTMESSAGE($_hwnd_self, 1024, 123, 321)

// через 3 сек шлём  wParam = 555, lParam = 777
WAIT(3)
POSTMESSAGE($_hwnd_self, 1024, 555, 777)


WAIT(1)  // даём время сработать потоку
HALT


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: SENDMESSAGE
« Reply #16 on: June 20, 2019, 04:48:06 PM »
И так же можно передавать текст.
От кликера клиенту или другому кликеру
Code: (clickermann) [Select]
#name "Передача текста POSTMESSAGE"
// Author: Vint
// Version: 0.1 (20.06.2019)
// Скрипт для Clickermann v4.13.14

LOGCLEAR

$hwnd = 5000      // дискриптор окна клиента
$WM_text = 0xD003  // выбрали код для сообщения

$text = "Ехали медведи на велосипеде. 3 шт."

print("Символ -   Код")

$len = STRLEN($text) + 1
FOR($i=1,$i < $len)
   $chr = STRCUT($text, $i, 1)
   $cod = code($chr)
   print("  ", $chr, "    -  ", $cod)
   
   // передаём символ
   POSTMESSAGE($hwnd, $WM_text, $cod,1)  // lParam = 1 символ передаётся
END_CYC
POSTMESSAGE($hwnd, $WM_text, 0,0)  // wParam/lParam = 0 строка окончена

HALT

Quote
16:46:07 Символ -   Код
16:46:07   Е    -  1045
16:46:07   х    -  1093
16:46:07   а    -  1072
16:46:07   л    -  1083
16:46:07   и    -  1080
16:46:07        -  32
16:46:07   м    -  1084
16:46:07   е    -  1077
16:46:07   д    -  1076
16:46:07   в    -  1074
16:46:07   е    -  1077
16:46:07   д    -  1076
16:46:07   и    -  1080
16:46:07        -  32
16:46:07   н    -  1085
16:46:07   а    -  1072
16:46:07        -  32
16:46:07   в    -  1074
16:46:07   е    -  1077
16:46:07   л    -  1083
16:46:07   о    -  1086
16:46:07   с    -  1089
16:46:07   и    -  1080
16:46:07   п    -  1087
16:46:07   е    -  1077
16:46:07   д    -  1076
16:46:07   е    -  1077
16:46:07   .    -  46
16:46:07        -  32
16:46:07   3    -  51
16:46:07        -  32
16:46:07   ш    -  1096
16:46:07   т    -  1090
16:46:07   .    -  46
« Last Edit: June 24, 2019, 10:40:04 AM by Vint »


Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: SENDMESSAGE
« Reply #17 on: June 20, 2019, 06:53:13 PM »
ОГРОМНОЕ спасибо за развернутый ответ! Разбираться буду через два дня - завтра мне вставать в 5 утра на работу и работаю 2/2.
Я не ду... Потому и не бу...

Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
Re: SENDMESSAGE
« Reply #18 on: June 21, 2019, 02:44:39 PM »
А кто знает, какие коды и параметры POSTMESSAGE для нижеперечисленных сообщений окну (если они вообще есть в винде)?

1. Убрать с заголовка окна иконку, все кнопки управления и меню по правой клавише.
2. Закрепить окно на своем месте поверх всех окон так, чтобы невозможно его было ни сдвинуть, ни переместить, ни перекрыть никаким способом.
Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: SENDMESSAGE
« Reply #19 on: June 21, 2019, 04:24:54 PM »
Вряд ли такие команды есть в WinAPI.

Первое - это стили окна, они задаются при создании. Часть стилей можно заменить и позже. Но мне кажется это не API, а через вызов библиотеки GUI

Второе это обработчик событий. Может и есть команды, но я не знаю.


Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
Re: SENDMESSAGE
« Reply #20 on: June 21, 2019, 07:19:15 PM »
Вряд ли такие команды есть в WinAPI.

Первое - это стили окна, они задаются при создании. Часть стилей можно заменить и позже. Но мне кажется это не API, а через вызов библиотеки GUI

Второе это обработчик событий. Может и есть команды, но я не знаю.
По первому я так и подозревал, что таких команд нет. Перерыл весь мелко-мягкий сайт - и MSDN, и API, и UWP, нигде не нашел.
А по второму, думаю, есть. Вот, например маленькая прога - Power Menu для Win - https://power-menu.ru.uptodown.com/windows. Закрепляет окно, сворачивает в трей, регулирует прозрачность. Как-то она делает это.
Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: SENDMESSAGE
« Reply #21 on: June 23, 2019, 09:21:35 AM »
Что не правильно делаю? Отправляющий скрипт:
Code: (clickermann) [Select]
#name "Передача текста POSTMESSAGE"

LOGCLEAR
 
$_hwnd = wndfind("Name - GETMESSAGE test")      // дискриптор окна клиента
$WM_text = 0xD003  // выбрали код для сообщения
 
$text = "Ехали медведи на велосипеде. 3 шт."
 
print("Символ -   Код")
 
$len = STRLEN($text) + 1
FOR($i=1,$i < $len)
   $chr = STRCUT($text, $i, 1)
   $cod = code($chr)
   print("  ", $chr, "    -  ", $cod)
 
   // передаём символ
   POSTMESSAGE($_hwnd, $WM_text, $cod,1)  // lParam = 1 символ передаётся
   WAITMS(100)
END_CYC
POSTMESSAGE($_hwnd, $WM_text, 0,0)  // wParam/lParam = 0 строка окончена
 
HALT
Принимающий:
Code: (clickermann) [Select]
#name "GETMESSAGE test"

GETMESSAGE($wp, $lp, $isnew)
IF($isnew != 0)
   LOGWRITE($str)
else
   $str = strconcat($str, char($lp))
END_IF
WAITMS(50)
В итоге принимающий молчит...
Code: (clickermann) [Select]
$WM_text = 53251  // выбрали код для сообщенияи замена в конфиге "msg_hook = 1024" на "msg_hook = 53251" не помогает.
« Last Edit: June 23, 2019, 02:11:28 PM by Hito »
Я не ду... Потому и не бу...

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: SENDMESSAGE
« Reply #22 on: June 23, 2019, 06:06:02 PM »
1. $hwnd = wndfind("Name - GETMESSAGE test") не правильно, правильно - $hwnd = wndfind("GETMESSAGE test")
2. ты отправляешь wparam а принимаешь lparam. В принимающем ставим $str = strconcat($str, char($wp))

Ну и желательно начальное значение строки задать, ато там будет "0" . define($str,"")
И остановить принимающий кликер тоже вроде как задумывалось из отправляющего
Code: (clickermann) [Select]
   IF($wp+$lp = 0)
      halt
   END_IF


В общем, принимающий у меня вышел так
Code: (clickermann) [Select]
#name "GETMESSAGE test"
define($str,"")

GETMESSAGE($wp, $lp, $isnew)

IF($isnew = 0) 
   LOGWRITE($str)
else
   IF($wp+$lp = 0)
      halt
   END_IF   
   $str = strconcat($str, char($wp))
END_IF
WAITMS(50)

« Last Edit: June 24, 2019, 11:56:13 AM by dramster »

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: SENDMESSAGE
« Reply #23 on: June 23, 2019, 06:37:54 PM »
Диапазон кодов для использования локально (в одном приложении) хотя работать всё будет, но не всегда:
;~ Локальные сообщения       от  0x0400  (1024)  до  0x7FFF (32767)

Странно... А почему я в этом диапазоне могу передавать параметры от кликера своему приложению...? В смысле - у меня получается передать их из кликера и принять в приложении.

https://www.youtube.com/watch?v=v35tr0Ch5Yw&feature=youtu.be
Я не ду... Потому и не бу...

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: SENDMESSAGE
« Reply #24 on: June 23, 2019, 06:41:19 PM »
1. $_hwnd = wndfind("Name - GETMESSAGE test") не правильно, правильно - $_hwnd = wndfind("GETMESSAGE test")

С этим у меня все правильно ))

Я не ду... Потому и не бу...

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: SENDMESSAGE
« Reply #25 on: June 24, 2019, 12:24:57 AM »
1. $hwnd = wndfind("Name - GETMESSAGE test") не правильно, правильно - $hwnd = wndfind("GETMESSAGE test")

С этим у меня все правильно ))


АААА  :D так у тебя окно кликера переименовано, ктож знал...


твой скрин:
« Last Edit: June 24, 2019, 11:56:32 AM by dramster »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: SENDMESSAGE
« Reply #26 on: June 24, 2019, 07:29:37 AM »
Code: (clickermann) [Select]
$_hwnd = wndfind("Name - GETMESSAGE test")      // дискриптор окна клиента
$_hwnd это системная переменная, не нужно нужно пытаться записывать в нее что либо!

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: SENDMESSAGE
« Reply #27 on: June 24, 2019, 10:03:37 AM »
Ребят, спасибо большое за ответы! Буду разбираться потихоньку )) До меня все новое долго доходит...))
Я не ду... Потому и не бу...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: SENDMESSAGE
« Reply #28 on: June 24, 2019, 10:38:25 AM »
$_hwnd это системная переменная, не нужно нужно пытаться записывать в нее что либо!
Точно шеф. Всех запутав написав на основе старого кода и имена оттуда переползли. Вот такая оказия.
Но, т.к. я привязкой не пользуюсь, то моё переназначение ничего не ломало.
Поправлю ка в скрипте выше, чтоб не сбивал с толку.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: SENDMESSAGE
« Reply #29 on: June 24, 2019, 10:45:56 AM »
Странно... А почему я в этом диапазоне могу передавать параметры от кликера своему приложению...? В смысле - у меня получается передать их из кликера и принять в приложении.
Ограничений нет. Это просто соглашение, что вот тот диапазон для внутреннего использования, а тот для межпрограммного.
Когда обе программы твои, то никакой проблемы не возникнет, а вот если, допустим, принимающая написана не тобой, она может использовать часть кодов для внутреннего обмен командами. Если не придерживаться можно создать конфликт, ты ведь не знаешь код внутри и что он использует.
Для этого и принято разделение, чтоб не сломать внутрянку чужой программы.