Author Topic: как реализовать цикл?  (Read 4841 times)

0 Members and 7 Guests are viewing this topic.

Qwerry

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Re: как реализовать цикл?
« Reply #15 on: June 19, 2017, 09:22:47 PM »
Вот теперь стало понятно что именно у тебя не работало. Точнее всё работало, но ты думал что должно быть всё по другому.
Я понял тебя но не могу никак понять как зациклить, вот часть скрипта помоги правильно поставить "Зажатие С, Х"

Если сделать просто нажатие, то клавиши отпускаются после начала цикла поиска окна.

Понял, но видимо не до конца. Попробую немножко дополнить объяснение Винта.

1. Существует реальная (физическая) клавиатура. Прежде чем сигнал от нее дойдет куда следует, он обрабатывается драйвером клавиатуры. Клавиатура дает один сигнал,иногда драйвер его видоизменяет (например превращает  сигнал от зажатой клавиши С в повторяющиеся через несколько милисекунд нажатия этой  кнопки - и ты видишь "СССССССССССС").
Quote
Автоповтор - это возможности драйвера физической клавиатуры и им он реализован.

2. Существует  некое приложение, которое ожидает, что нажатие С или Х происходит на реальной клавиатуре (т.е. ждет сигнала с клавиатуры уже обработанного драйвером клавиатуры).

 3. Но тут появляется виртуальная клавиатура, сигнал которой соответствует сигналу реальной клавиатуры, но НЕ обработанной тем драйвером.

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

5. И вот если такое происходит, чтобы все работало, тебе самому придется имитировать работу драйвера физической клавиатуры - т.е. сделать повторяющиеся через короткий промежуток времени нажатия клавиши (писать их в цикле в ELSE, как показали выше).

Вывод: скрипт делает ровно то, что ты ему скажешь - отпускания кнопки не происходит. Но у тебя приложение ожидает несколько иной сигнал.
« Last Edit: June 19, 2017, 09:57:14 PM by Qwerry »

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: как реализовать цикл?
« Reply #16 on: June 20, 2017, 01:32:07 PM »
5. И вот если такое происходит, чтобы все работало, тебе самому придется имитировать работу драйвера физической клавиатуры - т.е. сделать повторяющиеся через короткий промежуток времени нажатия клавиши (писать их в цикле в ELSE, как показали выше).
Я понял Винта правильно и выложил свой вариант, я просил посмотреть правильно ли написал.
Code: (clickermann) [Select]
KEYDOWN(#C) // зажата кнопка с
KEYDOWN(#X) // зажата кнопка х
WAITMS(100)
 
$time2 = $_time_t + 10
WHILE($time2 > $_time_t)
   GETSCREEN(2,36, 961,575)
   COLORMODE(6, 2,36, 961,575)
   IF_PICTURE_IN (2,36, 961,575, "texture\Okno.bmp", 52275, 90)
      $time2 = 0
      KEYUP(#c) // отпустить кнопку с
      KEYUP(#x) // отпустить кнопку х
      WAITMS(100)
      LCLICK($_return1+315, $_return2+63)
      WAITMS(RND(170,210))
   ELSE
      WAITMS(50)
      KEYDOWN(#C) // зажата кнопка с
      KEYDOWN(#X) // зажата кнопка х
   END_IF
END_CYC

IF($time2 ! 0) // если картинка Okno.bmp не была найдена
   KEYUP(#c) // отпустить кнопку с
   KEYUP(#x) // отпустить кнопку х
END_IF
Да и если до скрипта не писать нажатие, то через раз не работает, не знаю с чем это связано.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: как реализовать цикл?
« Reply #17 on: June 21, 2017, 07:45:44 AM »
Нет не правильно, как я уже писал KEYDOWN при втором вызове отжимает и снова зажимает клавишу.
Получается что при отсутствии Okno.bmp у тебя скрипт будет постоянно строчить по CX

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: как реализовать цикл?
« Reply #18 on: June 23, 2017, 12:17:18 AM »

Получается что при отсутствии Okno.bmp у тебя скрипт будет постоянно строчить по CX
А разве это не отменяет вот эта часть кода?
Code: (clickermann) [Select]
IF($time2 ! 0) // если картинка Okno.bmp не была найдена
   KEYUP(#c) // отпустить кнопку с
   KEYUP(#x) // отпустить кнопку х
END_IF