Author Topic: Привязка к окну  (Read 1772 times)

0 Members and 1 Guest are viewing this topic.

Omich

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Привязка к окну
« on: May 13, 2019, 06:40:26 PM »
Я уже обращался за помощью сюда, мне помогли.
Теперь появилась другая проблема с этим скриптом) когда привязываю к окну клавиатура не работает (действия не производятся) как решить?

GETSCREEN
IF_PIXEL_IN(0,0, $_xmax,$_ymax, 15198207,6248287,5400184,12447743)
   SETTHREAD (t1,2)
   IF(ISKEYDOWN(#A)=1)
      KEYUP(#A)
   END_IF
   IF(ISKEYDOWN(#D)=1)
      KEYUP(#D)
   END_IF
   IF(ISKEYDOWN(#E)=1)
      KEYUP(#E)
   END_IF
   LCLICK($_return1, $_return2)
   WAITMS(10)
ELSE
   SETTHREAD (t1,1)
   WAITMS(30)
END_IF
 
THREAD(t1,0)
   KEYDOWN(#A)
   WAIT(1)
   KEYUP(#A)
   WAIT(1)
   KEYDOWN(#D)
   WAIT(1)
   KEYUP(#D)
   WAIT(1)
   KEYPRESS(#E)
   WAIT(1)
END_THREAD

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
Re: Привязка к окну
« Reply #1 on: May 13, 2019, 07:16:07 PM »
можно попробовать сделать вот так, только не забудь дескриптор окна в переменную hwnd записать

Code: (clickermann) [Select]
SUB(_KEYBOARD_EVENT, $event, $key, $hwnd)

   $_SUB_DELAY_KEYBOARD_EVENT = 25
   
   SWITCH($event)
   CASE("KEYPRESS")
      SENDMESSAGE($hwnd, 0x0100, $key, 0)
      WAITMS($_SUB_DELAY_KEYBOARD_EVENT)
      SENDMESSAGE($hwnd, 0x0101, $key, 0)
   CASE("KEYDOWN")
      SENDMESSAGE($hwnd, 0x0100, $key, 0)
   CASE("KEYUP")
      SENDMESSAGE($hwnd, 0x0101, $key, 0)
   END_SWITCH
END_SUB

Code: (clickermann) [Select]
THREAD(t1,0)
   _KEYBOARD_EVENT("KEYDOWN", #A, $hwnd)
   WAIT(1)
   _KEYBOARD_EVENT("KEYUP", #A, $hwnd)
   WAIT(1)
   _KEYBOARD_EVENT("KEYDOWN", #D, $hwnd)
   WAIT(1)
   _KEYBOARD_EVENT("KEYUP", #D, $hwnd)
   WAIT(1)
   _KEYBOARD_EVENT("KEYPRESS", #E, $hwnd)
   WAIT(1)
END_THREAD
« Last Edit: May 13, 2019, 07:17:39 PM by Космич »
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Привязка к окну
« Reply #2 on: May 13, 2019, 08:23:49 PM »
можно попробовать сделать вот так, только не забудь дескриптор окна в переменную hwnd записать

Кликер может возвращать текущий HWND привязанного окна. К тому же описание подпрограммы должно быть внутри потока.

Я уже обращался за помощью сюда, мне помогли.
Теперь появилась другая проблема с этим скриптом) когда привязываю к окну клавиатура не работает (действия не производятся) как решить?

Скрипт что я написал выше не предназначен для оконного режима. Клавиши в оконном режиме не могут быть зажаты командами KEYDOWN но с помощью SENDMESSAGE есть вероятность что будет работать. Все зависит от окна.

Скрипт для оконного режима.
Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(0,0, $_xmax,$_ymax, 15198207,6248287,5400184,12447743)
   SETTHREAD (t1,2)
   LCLICK($_return1, $_return2)
   WAITMS(10)
ELSE
   SETTHREAD (t1,1)
   WAITMS(30)
END_IF

THREAD(t1,0)
   SUB(_KEYBOARD_EVENT, $event, $key)
      SWITCH($event)
         CASE("KEYPRESS")
            SENDMESSAGE($_hwnd, 0x0100, $key, 0)
            WAITMS(30)
            SENDMESSAGE($_hwnd, 0x0101, $key, 0)
         CASE("KEYDOWN")
            SENDMESSAGE($_hwnd, 0x0100, $key, 0)
         CASE("KEYUP")
            SENDMESSAGE($_hwnd, 0x0101, $key, 0)
      END_SWITCH
   END_SUB
   _KEYBOARD_EVENT("KEYDOWN", #A)
   WAIT(1)
   _KEYBOARD_EVENT("KEYUP", #A)
   WAIT(1)
   _KEYBOARD_EVENT("KEYDOWN", #D)
   WAIT(1)
   _KEYBOARD_EVENT("KEYUP", #D)
   WAIT(1)
   _KEYBOARD_EVENT("KEYPRESS", #E)
   WAIT(1)
END_THREAD

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
Re: Привязка к окну
« Reply #3 on: May 13, 2019, 08:43:33 PM »
а ну да, точно.  тогда лучше прописать через директиву #include

«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

Omich

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Привязка к окну
« Reply #4 on: May 14, 2019, 02:17:12 PM »
можно попробовать сделать вот так, только не забудь дескриптор окна в переменную hwnd записать

Кликер может возвращать текущий HWND привязанного окна. К тому же описание подпрограммы должно быть внутри потока.

Я уже обращался за помощью сюда, мне помогли.
Теперь появилась другая проблема с этим скриптом) когда привязываю к окну клавиатура не работает (действия не производятся) как решить?

Скрипт что я написал выше не предназначен для оконного режима. Клавиши в оконном режиме не могут быть зажаты командами KEYDOWN но с помощью SENDMESSAGE есть вероятность что будет работать. Все зависит от окна.

Скрипт для оконного режима.
Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(0,0, $_xmax,$_ymax, 15198207,6248287,5400184,12447743)
   SETTHREAD (t1,2)
   LCLICK($_return1, $_return2)
   WAITMS(10)
ELSE
   SETTHREAD (t1,1)
   WAITMS(30)
END_IF

THREAD(t1,0)
   SUB(_KEYBOARD_EVENT, $event, $key)
      SWITCH($event)
         CASE("KEYPRESS")
            SENDMESSAGE($_hwnd, 0x0100, $key, 0)
            WAITMS(30)
            SENDMESSAGE($_hwnd, 0x0101, $key, 0)
         CASE("KEYDOWN")
            SENDMESSAGE($_hwnd, 0x0100, $key, 0)
         CASE("KEYUP")
            SENDMESSAGE($_hwnd, 0x0101, $key, 0)
      END_SWITCH
   END_SUB
   _KEYBOARD_EVENT("KEYDOWN", #A)
   WAIT(1)
   _KEYBOARD_EVENT("KEYUP", #A)
   WAIT(1)
   _KEYBOARD_EVENT("KEYDOWN", #D)
   WAIT(1)
   _KEYBOARD_EVENT("KEYUP", #D)
   WAIT(1)
   _KEYBOARD_EVENT("KEYPRESS", #E)
   WAIT(1)
END_THREAD

Теперь когда привязываю к окну не работают клики

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
Re: Привязка к окну
« Reply #5 on: May 14, 2019, 02:26:13 PM »
Code: (clickermann) [Select]
SUB(_MOUSE_EVENT, $event, $x, $y, $_hwnd)

   $_SUB_DELAY_MOUSE_EVENT = 25
   
   SWITCH($event)
   CASE("LCLICK")
      SENDMESSAGE($_hwnd, 0x0201, 0x0001, $x + ($y*65536))
      WAITMS($_SUB_DELAY_MOUSE_EVENT)
      SENDMESSAGE($_hwnd, 0x0202, 0x0001, $x + ($y*65536))
   CASE("RCLICK")
      SENDMESSAGE($_hwnd, 0x0204, 0x0002, $x + ($y*65536))
      WAITMS($_SUB_DELAY_MOUSE_EVENT)
      SENDMESSAGE($_hwnd, 0x0205, 0x0002, $x + ($y*65536))
   CASE("MCLICK")
      SENDMESSAGE($_hwnd, 0x0207, 0x0010, $x + ($y*65536))
      WAITMS($_SUB_DELAY_MOUSE_EVENT)
      SENDMESSAGE($_hwnd, 0x0208, 0x0010, $x + ($y*65536))
   CASE("DBLCLICK")   
      SENDMESSAGE($_hwnd, 0x0203, 0x0001, $x + ($y*65536))
   CASE("LDOWN")
      SENDMESSAGE($_hwnd, 0x0201, 0x0001, $x + ($y*65536))
   CASE("LUP")
      SENDMESSAGE($_hwnd, 0x0202, 0x0001, $x + ($y*65536))
   CASE("RDOWN")
      SENDMESSAGE($_hwnd, 0x0204, 0x0002, $x + ($y*65536))
   CASE("RUP")
      SENDMESSAGE($_hwnd, 0x0205, 0x0002, $x + ($y*65536))
   CASE("MDOWN")
      SENDMESSAGE($_hwnd, 0x0207, 0x0010, $x + ($y*65536))
   CASE("MUP")
      SENDMESSAGE($_hwnd, 0x0208, 0x0010, $x + ($y*65536))
   CASE("MOVE")   
      SENDMESSAGE($_hwnd, 0x0200, 0,      $x + ($y*65536))   
   END_SWITCH
END_SUB
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»