Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - airdox

Pages: [1]
1
Да, так наверное даже лучше. В моем случае были еще проблемы со сворачиванием окна. И от анализа экрана If_picture_in-ом я ушел, и по совету сделал анализ хешем. В результате вылеты поборол. Ожидание работает как надо. Может кому пригодится:


Code: (clickermann) [Select]
$hwnd = wndfind("Название окна")
wndsize ($hwnd, 1050,10) //без этого могут оставаться артефакты от оконного изображения при getscreen и проверка может не пройти. Ширина требуемая, высота любая, кроме (-1). 
   wndpos($hwnd, 0, 0)  // убираем окно в угол
   wait(1)
   hset($hwnd,1) // привязываем к окну
   getscreen
   $hash = PXLXOR (100,100, 150, 150) //анализируем кусочек экрана, где окно точно есть
   if ($hash=0) //хеш 0 - черный цвет
      logwrite ("Обнаружен полноэкранный режим")
      while ($hash=0) //цикл ожидания выхода из полноэкранного режима
         wait(20)        // время до следующей проверки
         $hwnd = wndfind("Название окна") // если окно фулскрина имеет то же название, что и оконного, то при смене окна без этого переприсвоения будет ошибка
         hset($hwnd,1) // привязываемся снова (на случай если произошла смена окон)
         getscreen
         $hash = PXLXOR (100,100, 150, 150) //проверяем
      end_cyc
   end_if
   hset($hwnd,0) //отвязываемся
   wait(1)

2
Здравствуйте!

Это продолжение того скрипта, который мы проверяли на полный экран.
Так вот, задача, если приложение - фулскрин - приостановить выполнение скрипта до того момента пока оно из него не выйдет, а когда выйдет - продолжить. Периодическая проверка ИФ_ПИКЧЕ_ИНом с примесью привязки к окну мне не нравится тем, что создается впечатление, что само приложение начинает подлагивать, когда происходит проверка. Устроил бы вариант Dialogbox'а, как паузы,  если бы этот товарищ не выпрыгивал в самый неподходящий момент,  как черт из табакерки,  сворачивая полноэкранное приложение.
Вопрос:
1)можно ли как то сделать, чтобы он выпрыгивал в фоне, не сворачивая приложение?
2)может есть какая то альтернатива поставить скрипт на паузу?

Спасибо !

3
В результате получилось сделать следующим образом:
Так как механизм привязки мне не доконца понятее(как в нем ведет себя мышь и почему не хочет кликать и т.д.) было принято решение для проверки на фулскриновость :
Выставить окно в 0,0, предварительно найдя его по названию ->  включить привязку->сделать getscreen ->выключить привязку->проанализировать в координатах близких к 0,0 на черный квадрат. Если приложение фулскрин - чернота будет, если нет - будет наше окно.
Спасибо за идею!

UPD: прошу прощения за поспешные вопли о том, что все работает. На самом деле пришлось повозиться. Причины нижеописанного кроются ,видимо, где то в недрах кликермана. На деле вышло вот что:
Сперва я дума, что будет работать так:
Code: [Select]
hset($hwnd,1)        //ingame check
getscreen
hset($hwnd,0)

IF_PICTURE_IN (0,0, 100,100,"черный_квадрат.bmp", -1, 100)
//код
END_IF

На деле же, когда цикл проходил один раз в оконном режиме, а потом пытался проверить на полноэкранный, то не находил черноту по которй мы проверяем потому, что в той области оставалось изображение оконного режима(хоть и не должно бы).
Обновить изображение до требуемой черноты получилось только вот так:
Code: [Select]
   
wndsize ($hwnd, 1000,-1) //вот эта строка

hset($hwnd,1)       
getscreen
hset($hwnd,0)
   
IF_PICTURE_IN (0,0, 100,100,"черный_квадрат.bmp", -1, 100)
//код
END_IF

Выходит, чтобы убрать остаточное изображение, нужно перед гетскрином изменить размер окна. Как то так..

4
hset есть. Это имеется в виду?

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

6
И еще раз надоем.
Хочу задать скрипту ожидание, пока окно из полноэкранного режима перейдет в оконный. Есть ли какая нибудь специальная команда которая возвращает состояние окна? Думал сделать проверку по черному экрану, но оказалось бестолковой затеей) :D

7
Я в этом деле дилетант, так быстро не соображаю) Буду разбираться батниками) Не изучал этот вопрос пока!
Спасибо!

8
Здравствуйте!

Пися Пиша Продолжая писать кликер снова назрело:
После каждого прохождения цикла скрипт делает  скрин.
Внимание вопрос: после остановки скрипта пользователем, возможно ли сделать так, чтобы при следующем его запуске старые скрины удалялись и запись новых происходила в чистую папку (или перезаписывались те, что уже в ней лежат)?

Не нашел в хелпе ничего про работу с файлами  :(

9
Да, действительно было включено увеличение 125%. После переключения в 100% все заработало как надо.
Спасибо! Вопрос решен  :)

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

11
Итак результаты экспериментов выявили:
При снимке командой "скриншот" получается изображение формата 1280х720. При рассмотрении нижней правой точки монитора через лупу показывает пропорционально сдвинутую вверх влево точку. Причем при приближении курсора лупы к отметке 0.0(верхнему  левому краю) этот сдвиг уменьшается и в  точке стремящейся к 0.0 можно сказать с ней совпадает.
Далее. При изменении разрешения монитора на 1280х720, видимая область и скриншот соответственно уменьшаются снова примерно на то же отношение и все повторяется.
Такие дела. Видимо что нарушено во взаимодействии графических основ софта и системы. Напомню, там win 8.1.

12

GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "play.bmp", -1, 90)
      logwrite ("Play found.Connected. Starting client...")
   ELSE
       logwrite ("Connection error")
   END_IF

Запускаем ланчер игры. У него справа снизу огромная красная кнопка "Играть". Ее и нужно найти методом IF_PICTURE_IN. У меня все работает, а вот на другом компе почему то присутствует слепая зона и соответственно код выводит эррор. То есть getscreen не фотографирует сантиметров 5 справа и 3 снизу. Если сместить окно ланчера влево вверх в "видимую зону" -  все норм.

13
Доброго времени суток!

Собственно шаблонный IF_PICTURE_IN от 0,0 до xmax, ymax. У меня на компе работает, у товарища нет. Начал разбираться и увидел:
Мое разрешение 1399х768 (Win7), когда делаешь скрин средставми Кликермана(с колормодами например) - видит весь экран.
Его разрешение 1920х1080(Win8), в его случае скрин получается обрезанным справа и снизу. То есть getscreen "не видит" ту часть экрана в которой надо распознать картинку.

Бывало ли в вашей практике подобное, и если да, то как раскрыть ему глаза на весь экран? )

Спасибо!

Pages: [1]