Author Topic: разбираюсь с POSTMESSAGE  (Read 10218 times)

0 Members and 1 Guest are viewing this topic.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
разбираюсь с POSTMESSAGE
« on: March 20, 2014, 09:57:31 AM »
Привет всем!!!

 захателось мне привязать акно с игрой к кликеру. но  при привязке команда клавиатуры в скрипте либо неработают, либо работают некорректно. решил использовать POSTMESSAGE (hwnd, message, wParam, lParam). про кликанье мышкай я нашел на форуме подсказки, но вот про нажатие клавиш клавиатуры - ничего (либо плохо искал).
 в общем, начал разбираться сам. hwnd - понятно, достал строчкой $HWND = wndfind("название окна"). message - взял отсюда http://msdn.microsoft.com/en-us/library/windows/desktop/ff468861(v=vs.85).aspx. wParam - отсюда http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx. а вот с lParam я так и непонял ничего, но писал "0", все работает. в общем написал простенький скрипт для проверки:
Code: (clickermann) [Select]
$HWND = wndfind("заголовок окна")
$KEYDOWN = 0x0100  //WM_KEYDOWN message
$KEYUP = 0x0101  //WM_KEYUP message
$w = 0x57   // Virtual-Key Code  клавиши W

POSTMESSAGE ($HWND, $KEYDOWN , $w , 0 ) //нажал
WAIT(1)
POSTMESSAGE ($HWND, $KEYUP , $w , 0 ) //отпустил
WAIT(1)

работает отлично, ура!!!

но возникли вопросы, вот некоторые из них:

1. так что же вписывать в lParam, и на что это может повлиять?
2. хотелось бы узнать, что значят остальные сообщения (по клавиатуре) http://msdn.microsoft.com/en-us/library/windows/desktop/ff468861(v=vs.85).aspx
 WM_ACTIVATE
 WM_APPCOMMAND
 WM_CHAR
 WM_DEADCHAR
 WM_HOTKEY
 WM_KEYDOWN
 WM_KEYUP
 WM_KILLFOCUS
 WM_SETFOCUS
 WM_SYSDEADCHAR
 WM_SYSKEYDOWN
 WM_SYSKEYUP
 WM_UNICHAR
3. (возможно ответ в пункте 2) как реализовать KEYPRESS? я писал так :
Code: (clickermann) [Select]
$HWND = wndfind("заголовок окна")
$KEYDOWN = 0x0100  //WM_KEYDOWN message
$KEYUP = 0x0101  //WM_KEYUP message
$w = 0x57   // Virtual-Key Code  клавиши W

POSTMESSAGE ($HWND, $KEYDOWN , $w , 0 )    //нажал
POSTMESSAGE ($HWND, $KEYUP , $w , 0 )     //отпустил
WAIT(1)
работает как клик, правильно ли это?

ну вроде пока всё вспомнил, что меня интересовало. возможно поможет еще комунибудь. всем спасибо за будущие ответы.
« Last Edit: March 20, 2014, 10:22:21 AM by eduard »

Torari

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
Re: разбираюсь с POSTMESSAGE
« Reply #1 on: March 21, 2014, 06:37:44 AM »
Quote
хотелось бы узнать, что значат остальные сообщения (по клавиатуре)
присоединяюсь)

And_Ro

  • Зашел в гости
  • *
  • Posts: 12
  • Не злой
    • View Profile
Re: разбираюсь с POSTMESSAGE
« Reply #2 on: September 14, 2014, 08:47:22 PM »
Эта конструкция посылает в Блокнот два символа (не знаю почему, но срабатывает и UP и DOWN). На мой взгляд можно использовать WM_CHAR 0x0102. См http://forum.sources.ru/index.php?showtopic=381037
RTFM !!!

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: разбираюсь с POSTMESSAGE
« Reply #3 on: September 15, 2014, 05:54:20 PM »
захателось мне привязать акно с игрой к кликеру. но  при привязке команда клавиатуры в скрипте либо неработают, либо работают некорректно

А Режимы - "#ps2_keyboard" и "#ps2_mouse", не пробовал?
Я не ду... Потому и не бу...

And_Ro

  • Зашел в гости
  • *
  • Posts: 12
  • Не злой
    • View Profile
Re: разбираюсь с POSTMESSAGE
« Reply #4 on: September 15, 2014, 10:09:05 PM »
Пробовал (см. прицеп). А у тебя реально работает? Win7? 32 или 64? В каком приложении использовал?
RTFM !!!

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: разбираюсь с POSTMESSAGE
« Reply #5 on: September 15, 2014, 11:19:25 PM »
захателось мне привязать акно с игрой к кликеру. но  при привязке команда клавиатуры в скрипте либо неработают, либо работают некорректно

А Режимы - "#ps2_keyboard" и "#ps2_mouse", не пробовал?
решил я испробовать  "#ps2_keyboard" (с обычным KEYDOWN(#w)KEYUP(#w)), все верно, w нажимается как нада, но только если окно на переднем плане, если же на передний план поставить другое окно, то нажатия переходят на него.(это с превязкой конечно же)

без "#ps2_keyboard", вместо нажатия W, почемуто нажимает лкм

с POSTMESSAGE ($HWND, $KEYDOWN , $w , 0 ), все работает так как надо. но это в игре конечноже.  решил проверить в блокноте..... и точно, нажимает на W 2 раза и на $KEYDOWN и на $KEYUP.(безпонятия почему так)

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: разбираюсь с POSTMESSAGE
« Reply #6 on: October 08, 2014, 05:11:42 PM »
Хз, дружище... Ты там столько переменных нахреновертил и только для таких простых команд, что я не понимаю твоего скрипта... :)
Я не ду... Потому и не бу...

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: разбираюсь с POSTMESSAGE
« Reply #7 on: October 10, 2014, 09:34:03 PM »
Хз, дружище... Ты там столько переменных нахреновертил и только для таких простых команд, что я не понимаю твоего скрипта... :)
:D как думаешь, что понятнее
Code: (clickermann) [Select]
POSTMESSAGE ($HWND, $KEYDOWN , $w , 0 )или
Code: (clickermann) [Select]
POSTMESSAGE (756243, 0x0101 , 0x57 , 0 )
или ты имел ввиду, что это всё можно было заменить обычным KEYDOWN(#w)!?
Quote
захателось мне привязать акно с игрой к кликеру. но  при привязке команда клавиатуры в скрипте либо неработают, либо работают некорректно.
« Last Edit: October 10, 2014, 09:40:41 PM by dramster »

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: разбираюсь с POSTMESSAGE
« Reply #8 on: October 10, 2014, 11:12:25 PM »
:D как думаешь, что понятнее

Для меня в ОБОИХ вариантах полная белиберда  :D Я вообще сейчас загружен тем, что ОКАЗЫВАЕТСЯ эта тупая машина НИЧЕГО, кроме ноля и единицы не понимает... Как две крайности - "Бога нет" и "Бог есть". Я в ШОКЕ... )) Это получается, что наш (сорри - Johnny) кликер - всего лишь ПЕРЕВЕДЧИК команд, приближенных для нашего понимания, для процессора компьютера? То есть - он переводит процессору наши команды, переводя их на язык ноля и единицы?
« Last Edit: October 10, 2014, 11:42:04 PM by Hito »
Я не ду... Потому и не бу...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: разбираюсь с POSTMESSAGE
« Reply #9 on: October 11, 2014, 06:11:05 AM »
Нет. Всё еще хуже чем ты думаешь.


aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Re: разбираюсь с POSTMESSAGE
« Reply #10 on: October 11, 2014, 08:20:08 AM »
ага 0 и 1 это абстракция, начни с того что есть транзисторы их состояние и такты )

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: разбираюсь с POSTMESSAGE
« Reply #11 on: October 11, 2014, 08:26:30 AM »
Ну это утрировано. В конечном случае с железяками дейстительно только 1 и 0 (есть заряд - нет заряда) потому что машина по другому не умеет, но сам процессор оперирует с командами. Если вы хоть раз видели код на ассемблере, то вот примерно такие инструкции выполняет процессор, работая со стеком, регистрами и прочим. У меня была в институте дисциплина по низкоуровневому программированию. Так вот там что бы умножить два числа, приходилось очень сильно извернуться кодом строк на 10. Потому что как таковых переменных там не было. Был рабочий регистр, был небольшой банк памяти, была возможность складывать. Умножение делалось циклом, организация которого ввиду отсутствия переменных и условий тоже была очень занятной штукой... Все было основано на волшебной команде "если в регистре сейчас 0, то пропускаем следующую команду".. Эта кстати дисциплина существенно помогла мне продвинуться в разработке КМ. Поэтому сказать что "сейчас в России ничему не учат" я не умогу.
Вообщем поэтому традиционно считается что по ассемблерному коду невозможно достаточно точно восстановить исходный код. Слишком большой уровень запутанности. При том что ассемблерный код можно получить всегда и он остается рабочим. Именно умельцам читать этот код мы обязаны всем существующим крякам к программам.
Что до кликера, то он возводит уровень абстракции еще выше. То есть, если команда "записать строчку в файл" на асме (на командах процессору) содержала бы 100 строк, на С++ это было бы строк примерно 3-4, в CM это вообще одна строка.
« Last Edit: October 11, 2014, 08:30:15 AM by Johnny »

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: разбираюсь с POSTMESSAGE
« Reply #12 on: October 11, 2014, 10:39:32 AM »
Ну это утрировано. В конечном случае с железяками дейстительно только 1 и 0 (есть заряд - нет заряда) потому что машина по другому не умеет, но сам процессор оперирует с командами. Если вы хоть раз видели код на ассемблере, то вот примерно такие инструкции выполняет процессор, работая со стеком, регистрами и прочим. У меня была в институте дисциплина по низкоуровневому программированию. Так вот там что бы умножить два числа, приходилось очень сильно извернуться кодом строк на 10. Потому что как таковых переменных там не было. Был рабочий регистр, был небольшой банк памяти, была возможность складывать. Умножение делалось циклом, организация которого ввиду отсутствия переменных и условий тоже была очень занятной штукой... Все было основано на волшебной команде "если в регистре сейчас 0, то пропускаем следующую команду".. Эта кстати дисциплина существенно помогла мне продвинуться в разработке КМ. Поэтому сказать что "сейчас в России ничему не учат" я не умогу.
Вообщем поэтому традиционно считается что по ассемблерному коду невозможно достаточно точно восстановить исходный код. Слишком большой уровень запутанности. При том что ассемблерный код можно получить всегда и он остается рабочим. Именно умельцам читать этот код мы обязаны всем существующим крякам к программам.
Что до кликера, то он возводит уровень абстракции еще выше. То есть, если команда "записать строчку в файл" на асме (на командах процессору) содержала бы 100 строк, на С++ это было бы строк примерно 3-4, в CM это вообще одна строка.

Ну, я просто  утрировал ситуацию и вырезал между кликером и процессором все остальные переводчики. Суть как бы выложил саму. Понятно, что С++, Java и так далее - как раз те переводчики, на которых и пишутся программы, которые той же С++ расшифровывают слова "Я никуя не понимаю", С++ в свою очередь расшифровывает это процессору, а тот получил набор нолей и единиц и отвечает - "Почему? Я все понял!" ))) В общем моя задача - стать гением в этой области ))) Кстати... Никто не знает, как exe-шник открыть в текстовом редакторе? Хочу на кракозябры посмотреть там...

А всё - открыл....................... В общем до гения, как до китая раком....

Но это меня только бодрит!  :) Я упертый товарищ  :)
« Last Edit: October 11, 2014, 10:56:39 AM by Hito »
Я не ду... Потому и не бу...

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Re: разбираюсь с POSTMESSAGE
« Reply #13 on: October 11, 2014, 11:23:14 AM »
Бессмысленно открывать ехе в блокноте там ничего вразумительного не найдете, возьмите в руки де компилятор и тогда что-то более менее почерпнете, но без знания языка н котором было написано приложение и ассемблера нефик даже соваться

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: разбираюсь с POSTMESSAGE
« Reply #14 on: October 11, 2014, 11:29:27 AM »
Бессмысленно открывать ехе в блокноте там ничего вразумительного не найдете, возьмите в руки де компилятор и тогда что-то более менее почерпнете, но без знания языка н котором было написано приложение и ассемблера нефик даже соваться

Бессмыслие я перевожу, как - "0". Но... Без ноля, бессмысленна и единица. В этой жизни НЕТ НИЧЕГО бессмысленного. Если я открою exe в блокноте и пойму (1), что я никера не пойму (2), то второе "пойму" для меня - 0, но первое, для меня - 1  :)
Я не ду... Потому и не бу...