Author Topic: Прошу помощи с привязкой к окну и работе в фоновом режиме  (Read 2773 times)

0 Members and 1 Guest are viewing this topic.

ВладимирВВ

  • Зашел в гости
  • *
  • Posts: 1
    • View Profile
Доброго времени суток!
Не смог разобраться как заставить работать Clickermann в эмуляторе Андроида (в настоящий момент Nox) и параллельно самому использовать другие приложения на ПК (браузер, офисный пакет...).

Code: [Select]
// Требуется версия кликера 4.12 и выше

// #include "alt_winmode.cms"

// $HWND = 789498

#logfile "Log.txt"

IF($t1 = 0)
   $t1 = $t1^1
   // включение
   LOGWRITE("в_ключение 1")
   LOGWRITE("$t1=", $t1)
   
   GETSCREEN
   HINTPOPUP ("Нажмите CTRL для продолжения","Укажите верхний левый угол")
   WHILE(iskeydown(#CTRL)=0)
      WAITMS(20)
   END_CYC
   $x1 = $_xmouse
   $y1 = $_ymouse
   WHILE(iskeydown(#CTRL)=1)
      WAITMS(20)
      LOGWRITE("X=", $x1, " Y=", $y1)
      LOGWRITE("исходная координата 1")
      $flag=1
     
   END_CYC
   BEEP(1000,200)
   
   //
   
   HINTPOPUP ("Нажмите CTRL для продолжения","Укажите нижний правый угол")
   WHILE(iskeydown(#CTRL)=0)
      WAITMS(20)
   END_CYC
   $x2 = $_xmouse
   $y2 = $_ymouse
   WHILE(iskeydown(#CTRL)=1)
      WAITMS(20)
      LOGWRITE("X=", $x2, " Y=", $y2)
      LOGWRITE("исходная координата 2")
   END_CYC
   BEEP(1000,200)
   
   //
   
ELSE
   //$t1 = $t1^1
   // выключение
   LOGWRITE("вы_ключение")
END_IF



GETSCREEN

INC($vargetscreen,1)

LOGWRITE("GETSCREEN")
LOGWRITE("vargetscreen=", $vargetscreen)

//ждем пиксель в точке 1

IF_PIXEL_IN($x1-5, $y1-5, $x1+5, $y1+5, 16775659)
   LOGWRITE("пиксель точка 1 найден")
   LCLICK($_return1, $_return2)
// A_LCLICK ($_return1, $_return2, $hwnd)
   WAITMS(250)
   INC($var_1,1)
   LOGWRITE("ЛКМ нажата")
   LOGWRITE("var_1=", $var_1)
   LOGWRITE("X=", $x1, " Y=", $y1)
   LOGWRITE("X=", $_return1, " Y=", $_return2)
   
END_IF

//ждем пиксель в точке 2

IF_PIXEL_IN($x2-5, $y2-5, $x2+5, $y2+5, 16775659)
   LOGWRITE("пиксель точка 2 найден")
   LCLICK($_return1, $_return2)
// A_LCLICK ($_return1, $_return2, $hwnd)
   WAITMS(250)
   INC($var_2,1)
   LOGWRITE("ЛКМ нажата")
   LOGWRITE("var_2=", $var_2)
   LOGWRITE("X=", $x2, " Y=", $y2)
   LOGWRITE("X=", $_return1, " Y=", $_return2)
   
END_IF


LOGWRITE("конец цикла")


В общих чертах скрипт работает верно, выполняя необходимые действия (возможно сделано топорно, буду признателен если тоже подскажете как упростить). Но это только если окно не перекрыто, т.к. я не смог разобраться с привязкой к конкретному окну. Если часть эмулятора перекрыта, закрывая необходимую область, то работа скрипта приостанавливается.
Вторая проблема (возможно не для вас а для меня) то что при работе скрипта мышка перескакивает в окно в точку "клика".
Пытался использовать конструкцию
Code: [Select]
#include "alt_winmode.cms"
$HWND = 789498
A_LCLICK ($_return1, $_return2, $hwnd)
и
Code: [Select]
$WM_LBUTTONDOWN = 0x0201 // Левая кнопка мыши нажата.
$WM_LBUTTONUP = 0x0202 // Левая кнопка мыши отпущена.
$MK_LBUTTON = 0x0001 // Левая кнопка мыши находится в нажатом состоянии.
postmessage($HWND, $WM_LBUTTONDOWN, $MK_LBUTTON, $x + ($y*65536))
postmessage($HWND, $WM_LBUTTONUP, $MK_LBUTTON, $x + ($y*65536))
но к сожалению безуспешно. Скрипт при этом перестает работать (возможно я где то допустил ошибку).

Скрипт собрал из примеров на сайте, поэтому там много не относящихся к делу комментариев, плюс добавил вывод сообщений в лог, что бы понять где может крыться ошибка, потом все почищу.

Уточнение:
Собственно некорректно работающая часть кода ниже (два идентичных блока)

Code: [Select]
IF_PIXEL_IN($x2-5, $y2-5, $x2+5, $y2+5, 16775659)
   LCLICK($_return1, $_return2)
   WAITMS(250)
END_IF

Попытался организовать работу Clickerman на виртулатьной машине. Установил VirtualBox с WinXP, как сказано в одной их тем здесь на форуме http://crapware.aidf.org/forum/index.php?topic=2123.msg12663#msg12663 , но там я не могу настроить интернет (требует драйвера на сетевую карту). Возможно тоже буду пытаться сделать это параллельно.
Буду признателен за помощь.

« Last Edit: December 03, 2021, 11:03:48 PM by ВладимирВВ »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Для начала попробуй работу скрипта с привязкой к окну. Наведи курсорна нужное окно и нажми ctrl+w. Проверь, видит ли кликер это окно (с привязкой) - в редакторе вкл лупу и если все ок, то все будет работать не мешая работе за пк.


С A_LCLICK  там немного все сложнее. Координаты клика там нужно вводить относительно положения нужного окна. У тебя же эти координаты IF_PIXEL_IN находит относительно верхнего левого угла всего экрана. Глянь, там в теме http://crapware.aidf.org/forum/index.php?topic=2111.0 есть A_IFPIXELIN. Он вроде как раз возвращает координаты относительно окна. Область поиска так же нужно рассчитывать относительно положения окна (самый простой вариант, это разместить это окно в координаты 0,0) . Но в этом случае нужно учитывать, что окно должно быть видно, поверх него ничего не должно быть. Но и этот вариант работает не во всех случаях. Если с первым и вторым вариантом не получится, то ставь виртуальную машину, а лучше сразу разберись что там у тебя с интернетом в ВМ и не парься с этой привязкой. По проблемам работы вирт.машины это уже не к нам.