Author Topic: Привязка к окну и работа в фоновом режиме.  (Read 16907 times)

0 Members and 3 Guests are viewing this topic.

IgorIgor

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Не могу привязать кликерманн к окну.
Справку читал. По форуму полазил.
Привязывается, но не работает.

Начнем по порядку. В программировании ноль.
Но с УОпилотом знаком уже не первый десяток лет.
Выставить координаты, привязать к цвету, настроить поиск картинок могу. ИФ, ВАЙЛ, бла-бла-бла, не самыми рациональными методами, но скрипт, для практически любых своих нужд, написать могу.
Да и в кликерманне все это освоил за считанные минуты.
Но вот проблему привязки к окну решить не могу.

Имею v4.7 и v.4.12.

Открываю скрипт в редакторе.

Вот так выглядят координаты с включенной привязкой к окну ( внизу окна "привязка к окну "***"):
Code: [Select]
LCLICK(580,296)  // 0Вот так без привязки (Режим эмуляции):
Code: [Select]
LCLICK(774,136)  // 44708
Действия соответственно никакие не выполняет. На сколько я понимаю он "плохо" привязался к окну и не всю информацию может с него считать, и отправить ему соответственно.

После включения режима привязки. координаты с рабочего окна вроде бы считывает правильно (0,0 слева,сверху именно рабочего окна, а не рабочего стола).

Для привязки к окну в первых строчка скрипта указываю:
Code: [Select]
$h = hget(х,у)
hset($h, 1)


Объясните тупому пожалуйста.
Вся информация в интернете сводиться к "нажми альт+W и все будет работать".


И сразу еще вопрос: существует ли комбинация клавишь для вставки ТОЛЬКО координат, а не целой строки с командой как на аль+Q?
« Last Edit: November 25, 2016, 08:38:22 PM by IgorIgor »

IgorIgor

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Да давайте уж все сразу покажу:
Code: [Select]

start:
LCLICK(774,136)  // 44708
WAITMS (RND(1000,2500))

GETSCREEN
$color = pxl (114,482)
IF($color = 7136108)
LCLICK(118,552)  // 2236962
WAITMS (500)
LCLICK(174,578)  // 2632753
WAITMS (1500)
LCLICK(174,578)  // 2632753
WAITMS (1500)
LCLICK(698,182)  // 2764340
WAITMS (1500)
LCLICK(748,78)  // 2764597
WAITMS (1500)
END_IF


GETSCREEN
$color = pxl (358,482)
IF($color = 7136108)
LCLICK(358,482)  // 2236962
WAITMS (500)
LCLICK(174,578)  // 2632753
WAITMS (1500)
LCLICK(174,578)  // 2632753
WAITMS (1500)
LCLICK(698,182)  // 2764340
WAITMS (1500)
LCLICK(748,78)  // 2764597
WAITMS (1500)
END_IF


GETSCREEN
$color = pxl (602,482)
IF($color = 7136108)
LCLICK(602,482)  // 2236962
WAITMS (500)
LCLICK(174,578)  // 2632753
WAITMS (1500)
LCLICK(174,578)  // 2632753
WAITMS (1500)
LCLICK(698,182)  // 2764340
WAITMS (5100)
LCLICK(748,78)  // 2764597
WAITMS (1500)
END_IF

GOTO(start)

Значит есть кнопка "обновить", скрипт по ней кликает и ждет 1-1.5сек
После этого в 4-ёх местах может появиться нужный мне объект, на котором нужно еще несколько кликов сделать. Скрипт вычисляет их по цвету определенного пикселя, который строго в 4-ёх же местах и может находиться.

Когда я выполняю привязку альт+W, скрипт перестает воспринимать цвета окна - это раз. И когда я переназначаю координаты под привязанное окно, я уже не могу определить цвета что бы забить в скрипт.
А два - перестает работать в принципе.

Метод описаный тут http://crapware.aidf.org/forum/index.php?topic=33.msg562#msg562
Сложноват для освоения.


А этот код не отпускает кнопку мыши:
Code: [Select]
$WM_LBUTTONDOWN = 0x0201
$WM_LBUTTONUP = 0x0202
$MK_LBUTTON = 0x0001
 
$HWND = 263332
 
$x = 768
$y = 98
 
// нажали
postmessage($HWND, $WM_LBUTTONDOWN, $MK_LBUTTON, $x + ($y*65536));
waitms(50)
// отпустили
postmessage($HWND, $WM_LBUTTONUP, $MK_LBUTTON, $x + ($y*65536));

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Quote
Объясните тупому пожалуйста.
Вся информация в интернете сводиться к "нажми альт+W и все будет работать".
Так оно и есть. Не надо думать что вот это
Code: (clickermann) [Select]
$h = hget(х,у)
hset($h, 1)
чем то отличается от Alt+W. Это лишь дополнительная возможность, если не работает используй основной режим.

Quote
И сразу еще вопрос: существует ли комбинация клавиш для вставки ТОЛЬКО координат, а не целой строки с командой как на аль+Q?
В редакторе нажми на значок "Планшет с листочком". При этом координата будет попадать в буфер.

Графику кликер может не видеть из за аппаратного ускорения в браузере например, или флешь игре.

shlemazl

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
А этот код не отпускает кнопку мыши:
Code: [Select]
$WM_LBUTTONDOWN = 0x0201
$WM_LBUTTONUP = 0x0202
$MK_LBUTTON = 0x0001
 
$HWND = 263332
 
$x = 768
$y = 98
 
// нажали
postmessage($HWND, $WM_LBUTTONDOWN, $MK_LBUTTON, $x + ($y*65536));
waitms(50)
// отпустили
postmessage($HWND, $WM_LBUTTONUP, $MK_LBUTTON, $x + ($y*65536));

такая же ситуация: кнопка ищется, нажимается, но не отпускается.
скрипт:
Code: [Select]
$NoxPlayer = 10423290 // изменяется при каждом запуске целевой программы, нужно каждый раз вписывать заново
HSET($NoxPlayer,1)

$WM_LBUTTONDOWN = 0x0201 // Левая кнопка мыши нажата.
$WM_LBUTTONUP = 0x0202 // Левая кнопка мыши отпущена.
$MK_LBUTTON = 0x0001 // Левая кнопка мыши находится в нажатом состоянии.

//ищем картинку "Посмотреть видео"
GETSCREEN
IF_PICTURE_IN (400,500,600,600,"11.bmp",-1,70) // поиск с 70% в заданном квадрате
   WAITMS(100)
   print("ПОСМОТРЕТЬ ВИДЕО найден в координатах X=", $_return1, ", Y=", $_return2) //пишем в лог
   postmessage($NoxPlayer, $WM_LBUTTONDOWN, $MK_LBUTTON, $_return1 + ($_return2*65536))
   postmessage($NoxPlayer, $WM_LBUTTONUP, $MK_LBUTTON, $x + ($_return2*65536))
   WAITMS(800)
   postmessage($NoxPlayer, $WM_LBUTTONUP, $MK_LBUTTON, $_return1 + ($_return2*65536))
END_IF
HSET($NoxPlayer,0)

привязываю к окну эмулятора NOX, win 7 32
скрины прикрепил.
« Last Edit: February 12, 2018, 11:52:20 AM by shlemazl »

shlemazl

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Прошу посмотреть скрины и прокомментировать.
На них видно, что кнопка "Посмотреть видео" НАЖИМАЕТСЯ при передаче данному окну winapi. Значит поиск по изображению происходит и происходит нажатие левой клавиши мыши в нужных координатах.
Вот только "postmessage($NoxPlayer, $WM_LBUTTONUP, $MK_LBUTTON, $_return1 + ($_return2*65536))" не срабатывает.
« Last Edit: February 12, 2018, 03:15:02 PM by shlemazl »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
такая же ситуация: кнопка ищется, нажимается, но не отпускается.
скрипт:
Code: [Select]
$NoxPlayer = 10423290 // изменяется при каждом запуске целевой программы, нужно каждый раз вписывать заново
HSET($NoxPlayer,1)

$WM_LBUTTONDOWN = 0x0201 // Левая кнопка мыши нажата.
$WM_LBUTTONUP = 0x0202 // Левая кнопка мыши отпущена.
$MK_LBUTTON = 0x0001 // Левая кнопка мыши находится в нажатом состоянии.

//ищем картинку "Посмотреть видео"
GETSCREEN
IF_PICTURE_IN (400,500,600,600,"11.bmp",-1,70) // поиск с 70% в заданном квадрате
   WAITMS(100)
   print("ПОСМОТРЕТЬ ВИДЕО найден в координатах X=", $_return1, ", Y=", $_return2) //пишем в лог
   postmessage($NoxPlayer, $WM_LBUTTONDOWN, $MK_LBUTTON, $_return1 + ($_return2*65536))
   postmessage($NoxPlayer, $WM_LBUTTONUP, $MK_LBUTTON, $x + ($_return2*65536))
   WAITMS(800)
   postmessage($NoxPlayer, $WM_LBUTTONUP, $MK_LBUTTON, $_return1 + ($_return2*65536))
END_IF
HSET($NoxPlayer,0)

привязываю к окну эмулятора NOX, win 7 32
скрины прикрепил.

Потому, что неправильно написано.
Была уже тема При клике мышка не отпускает кнопку (эмулятор нокс)


shlemazl

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
спасибо. работает :)

shlemazl

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Еще вопрос про нажатие кнопки ESC в том же Nox`е
конструкция:
Code: [Select]
postmessage($NoxPlayer, 0x0100, #ESC, 0)
WAIT(1)
postmessage($NoxPlayer, 0x0101, #ESC, 0)
в MS Paint работает, а в Nox`е - нет

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Еще вопрос про нажатие кнопки ESC в том же Nox`е
конструкция:
Code: [Select]
postmessage($NoxPlayer, 0x0100, #ESC, 0)
WAIT(1)
postmessage($NoxPlayer, 0x0101, #ESC, 0)
в MS Paint работает, а в Nox`е - нет

попробуй задействовать lParam так, как это предлагает msdn.


для WM_KEYDOWN, в принципе ничего интересного, кроме как количества нажатий кнопки (имитация удерживания кнопки клавиатуры при печатании) - первые 16 бит.

Quote
WM_KEYDOWN

lParam
The repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown following.

Bits   Meaning
0-15   The repeat count for the current message. The value is the number of times the keystroke is autorepeated as a result of the user holding down the key. If the keystroke is held long enough, multiple messages are sent. However, the repeat count is not cumulative.
16-23   The scan code. The value depends on the OEM.
24   Indicates whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.
25-28   Reserved; do not use.
29   The context code. The value is always 0 for a WM_KEYDOWN message.
30   The previous key state. The value is 1 if the key is down before the message is sent, or it is zero if the key is up.
31   The transition state. The value is always 0 for a WM_KEYDOWN message.

для WM_KEYUP уже вроде как нужны обязательные параметры (не равные нулю, как в WM_KEYDOWN) в lParam :-\ .

Quote
lParam
The repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table.

Bits   Meaning
0-15   The repeat count for the current message. The value is the number of times the keystroke is autorepeated as a result of the user holding down the key. The repeat count is always 1 for a WM_KEYUP message.
16-23   The scan code. The value depends on the OEM.
24   Indicates whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.
25-28   Reserved; do not use.
29   The context code. The value is always 0 for a WM_KEYUP message.
30   The previous key state. The value is always 1 for a WM_KEYUP message.
31   The transition state. The value is always 1 for a WM_KEYUP message.

если я все правильно понял, то lParam для WM_KEYUP в бинарном виде должен выглядеть так - 11000000000000000000000000000001 . в hex к примеру это - 0xC0000001 . попробовал всунуть такой параметр в postmessage, и получил ошибку от кликермана  >:( . на этом мои эксперименты с lParam закончились.



msdn - https://msdn.microsoft.com/en-us/library/windows/desktop/ff468861(v=vs.85).aspx