Author Topic: Не скриншотится менюшка программы из трея  (Read 6947 times)

0 Members and 1 Guest are viewing this topic.

YoClickamann

  • Освоившийся
  • **
  • Posts: 28
    • View Profile
Здравствуйте, есть такой вопрос.
У меня последняя версия кликера, Виндовс 8.0, отключил кликеру "Предотвращение выполнения данных" DEP (всё, как полагается).

Мне нужно снять скриншот экрана с всплывающей менюшкой, на которой размещён список открытых в системе окон, чтобы потом скрипт нашёл нужный мне пункт меню с программой и тыкнул в него для закрепления программы поверх всех окон. Но скриншот почему-то не снимается, пробовал даже давать кликеру привилегии админа, скриншоты с других областей экрана у меня делаются и распознаются успешно. Как я понимаю, эта меню представляет собой некий слой, который не виден на скрине, может быть, кто-то знает, как сделать этот слой видимым? Пробовал также привязку к этому меню и выполнение к нему WNDBUMP (). При этом сам фокус на меню, разумеется, происходит, и могу там перемещаться по пунктам меню из скрипта. Хотел ограничить зону поиска картинки пункта меню его явным местом нахождения, но поиск не находит картинку даже по всему экрану.

Или может кто подскажет другой быстрый способ, как зафиксировать окно определённой программы над всеми окнами, может даже напрямую из самого кликера или из другой утилитки, можно через команды (желательно именно так, если будет быстрее закрепить, чем через клики по if_picture_in). Спасибо.

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

Если нужно, выложу код скрипта:
[spoiler=Поиск иконки программы в трее, вызов меню окна программы]
Code: (clickermann) [Select]
/keypress (#WIN)
move(0, $_ymax)
wait(0.7)
getscreen

/IF_PICTURE_IN (0,0, $_xmax,$_ymax, "ontop.bmp")
IF_PICTURE_IN (1100,600, $_xmax,$_ymax, "ontop.bmp")
  print("ontop.bmp found at X=", $_return1, ", Y=", $_return2)
  move($_return1+5, $_return2+5)
rclick(-1,-1)
else
  print("ontop.bmp not found") 
END_IF

wait(1.5)
/keypress (#up)
/keypress (#up)
getscreen
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "redaktor.bmp")
/IF_PICTURE_IN (1100,600, $_xmax,$_ymax, "redaktor.bmp")
  print("redaktor.bmp found at X=", $_return1, ", Y=", $_return2)
  move($_return1+5, $_return2+5)
/lclick(-1,-1)
else
  print("redaktor.bmp not found") 
END_IF


halt
wait(5)
+

/IF_PICTURE_IN (0,0, $_xmax,$_ymax, "tray.bmp")
IF_PICTURE_IN (1100,600, $_xmax,$_ymax, "tray.bmp")
  print("tray.bmp found at X=", $_return1, ", Y=", $_return2)
  move($_return1+3, $_return2+0)
/lclick(-1,-1)
else
  print("tray.bmp not found") 
END_IF


halt
[/spoiler]
« Last Edit: September 30, 2016, 11:37:27 AM by YoClickamann »
Да разве могут дети юга где розы блещут в декабре
Где не разыщешь слова вьюга ни в памяти ни в словаре
Да разве им хоть так хоть вкратце хоть на минуту хоть во сне
Хоть ненароком догадаться что значит думать о весне?
Что значит в мартовские стужи когда отчаянье берёт
Всё ждать и ждать как неуклюже..

Золотой

  • Оплот сообщества
  • ****
  • Posts: 312
    • View Profile
Вероятная причина ; координаты скриншота выходят за размеры монитора.
 если находит его нормально через if_picture_in,
 то и
GETSCREEN
screenshot("скрин")
должно сохранять скрин, может вы их не в том месте ищите?
 Папка screens, рядом с делающим скрины скриптом.

YoClickamann

  • Освоившийся
  • **
  • Posts: 28
    • View Profile
Вероятная причина ; координаты скриншота выходят за размеры монитора.
Поправил сообщение и добавил код скрипта. Сам скрипт ищет пока что по всему экрану, если найдёт нужный мне пункт меню, то ограничу область поиска.

если находит его нормально через if_picture_in,  то и
GETSCREEN
screenshot("скрин")
должно сохранять скрин, может вы их не в том месте ищите?
 Папка screens, рядом с делающим скрины скриптом.

Спасибо за подсказку, сейчас попробую сделать скрин и посмотрю, что там кликер видит.
Да разве могут дети юга где розы блещут в декабре
Где не разыщешь слова вьюга ни в памяти ни в словаре
Да разве им хоть так хоть вкратце хоть на минуту хоть во сне
Хоть ненароком догадаться что значит думать о весне?
Что значит в мартовские стужи когда отчаянье берёт
Всё ждать и ждать как неуклюже..

Золотой

  • Оплот сообщества
  • ****
  • Posts: 312
    • View Profile
Code: (clickermann) [Select]
halt
это команда полной остановки скрипта, до поиска меню трея у вас код просто не доходит.

i0

  • Оплот сообщества
  • ****
  • Posts: 353
  • CMann 4.13.014 final, ie, presto, win7 x86, x64
    • View Profile
Или может кто подскажет другой быстрый способ, как зафиксировать окно определённой программы над всеми окнами, может даже напрямую из самого кликера или из другой утилитки, можно через команды. Спасибо.
а консольные утилиты Cmdow или NirCmd не подойдут? (в вин8 я их не пробовал)

Золотой

  • Оплот сообщества
  • ****
  • Posts: 312
    • View Profile
Code: (clickermann) [Select]

keypress (#WIN)
move(0, $_ymax)
WAITMS(700)
getscreen

IF_PICTURE_IN (0,0, $_xmax,$_ymax, "ontop.bmp")
   IF_PICTURE_IN (1100,600, $_xmax,$_ymax, "ontop.bmp")
      print("ontop.bmp found at X=", $_return1, ", Y=", $_return2)
      move($_return1+5, $_return2+5)
      WAITMS(200)
      rclick(-1,-1)
   else
      print("ontop.bmp not found")
   END_IF
END_IF
WAITMS(1500)
keypress (#up)
keypress (#up)
getscreen
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "redaktor.bmp")
   IF_PICTURE_IN (1100,600, $_xmax,$_ymax, "redaktor.bmp")
      print("redaktor.bmp found at X=", $_return1, ", Y=", $_return2)
      move($_return1+5, $_return2+5)
      WAITMS(200)
      lclick(-1,-1)
   else
      print("redaktor.bmp not found")
   END_IF
END_IF

wait(5)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "tray.bmp")
   IF_PICTURE_IN (1100,600, $_xmax,$_ymax, "tray.bmp")
      print("tray.bmp found at X=", $_return1, ", Y=", $_return2)
      move($_return1+3, $_return2)
      WAITMS(200)
      lclick(-1,-1)
   else
      print("tray.bmp not found")
   END_IF
END_IF

halt
половина ваших бед от стороннего редактора

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Потребуется утилита NirCmd v2.81
http://www.nirsoft.net/utils/nircmd.html
В самом низу страницы ссылка на скачивание.
Почитай справку к утилите по команде win там очень много параметров поиска и действий с окнами включая также поиск дочерних окон.

Помести nircmd.exe в папку со скриптом.

Можно написать вызов в самом кликере.
Code: (clickermann) [Select]
EXECUTE("nircmd.exe", "win settopmost process Clickermann.exe 1") // окно процесса Clickermann.exe будет закреплено выше всех
Однако если нужно искать окно по заголовку то нужно указывать кавычки а кликер их не переваривает.
Тогда можно создать батник и вызывать его кликером

Текст батника "Top.bat"
Все окна в заголовках которых присутствует "Clickermann" будут закреплены выше всех
Code: [Select]
nircmd.exe win settopmost ititle "Clickermann" 1

Скрипт
Code: (clickermann) [Select]
EXECUTE("Top.bat")
« Last Edit: September 30, 2016, 11:53:50 AM by Oraven »

Золотой

  • Оплот сообщества
  • ****
  • Posts: 312
    • View Profile
Code: (clickermann) [Select]

SUB(поиск, $par1, $par2) // подпрограмма с параметрами
   getscreen
    // совершенно непонятно зачем вы ищете одну картинку дважды?
      IF_PICTURE_IN (1100,600, $_xmax,$_ymax, $par1)
         print($par1," found at X=", $_return1, ", Y=", $_return2)
         move($_return1+3, $_return2)
         WAITMS(200)
         lclick(-1,-1)
      else
         print($par1," not found")
      END_IF   
   WAITMS($par2)
END_SUB

keypress (#WIN)
move(0, $_ymax)
WAITMS(700)
поиск("ontop.bmp",1500) // вызов подпрограммы (обязательно ниже подпрограммы)
keypress (#up)
keypress (#up)
поиск("redaktor.bmp",5000)
поиск("tray.bmp",0)
halt

YoClickamann

  • Освоившийся
  • **
  • Posts: 28
    • View Profile
Потребуется утилита NirCmd v2.81
Почитай справку к утилите по команде win там очень много параметров поиска и действий с окнами включая также поиск дочерних окон.

Можно написать вызов в самом кликере.
Code: (clickermann) [Select]
EXECUTE("nircmd.exe", "win settopmost process Clickermann.exe 1") // окно процесса Clickermann.exe будет закреплено выше всех

Текст батника "Top.bat"
Все окна в заголовках которых присутствует "Clickermann" будут закреплены выше всех
Code: [Select]
nircmd.exe win settopmost ititle "Clickermann" 1


Ой, спасибочки. Слышал про много утилит в Нирсофте, но ни разу не пользовался. И спасибо за подсказку команд. А как быстрее будет: через батник или напрямую командой к нирсофт.ехе? Подозреваю, что последнее. И ещё вопрос: это окно Нирсофта будет выскакивать или оно будет невидимым, просто выполнит команду и завершится не всплыв? А если будет всплывать, то можно ли в параметре как-то указать ему, чтоб оно не всплывало? Хотя это не принципиально. Ещё раз спс за наводку.
Да разве могут дети юга где розы блещут в декабре
Где не разыщешь слова вьюга ни в памяти ни в словаре
Да разве им хоть так хоть вкратце хоть на минуту хоть во сне
Хоть ненароком догадаться что значит думать о весне?
Что значит в мартовские стужи когда отчаянье берёт
Всё ждать и ждать как неуклюже..

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
И ещё вопрос: это окно Нирсофта будет выскакивать или оно будет невидимым, просто выполнит команду и завершится не всплыв? А если будет всплывать, то можно ли в параметре как-то указать ему, чтоб оно не всплывало? Хотя это не принципиально. Ещё раз спс за наводку.

На счет батника тут скорее решение проблем с символами которые нельзя указывать в строках типо кавычки.
Нет, утилита консольная а значит никаких окон не имеет.

YoClickamann

  • Освоившийся
  • **
  • Posts: 28
    • View Profile
Re: Не скриншотится менюшка программы из трея
« Reply #10 on: September 30, 2016, 12:08:59 PM »
дробные числа воспринимаются кликером с запятой
а правильнее будет записать так WAITMS(1500)
Буду знать, что надо с запятыми писать, спасибо. Но у меня пока работает не-флот и с точкой, тьфу-тьфу.

половина ваших бед от стороннего редактора.
Halt это команда полной остановки скрипта, до поиска меню трея у вас код просто не доходит.


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

а консольные утилиты Cmdow или NirCmd не подойдут? (в вин8 я их не пробовал)
Да, я вот как-раз и искал консольную, что-то вроде этого и чтоб она могла выводить поверх других окон. Спасиб за ссылки.
« Last Edit: September 30, 2016, 12:10:37 PM by YoClickamann »
Да разве могут дети юга где розы блещут в декабре
Где не разыщешь слова вьюга ни в памяти ни в словаре
Да разве им хоть так хоть вкратце хоть на минуту хоть во сне
Хоть ненароком догадаться что значит думать о весне?
Что значит в мартовские стужи когда отчаянье берёт
Всё ждать и ждать как неуклюже..

YoClickamann

  • Освоившийся
  • **
  • Posts: 28
    • View Profile
Re: Не скриншотится менюшка программы из трея
« Reply #11 on: September 30, 2016, 12:18:22 PM »
На счет батника тут скорее решение проблем с символами которые нельзя указывать в строках типо кавычки.
Нет, утилита консольная а значит никаких окон не имеет.

У меня консольные программы ассоциируются с чёрными выскакивающими окошками времён ДОСа, в частности и КМД.ехе так же выглядит, поэтому казалось, что они должны выскакивать и ждать ввода команды типа "press any key to continue" или же "подтвердите, что вы желаете закрепить выбранное окно поверх других". Но это очень круто, что ничего всплывать лишнего не будет. Отсюда только опять небольшой вопрос, а как можно будет узнать, что нирсофт уже закрепил окно? Он вернёт какую-то команду в кликер? Спрашиваю просто так, для общего развития, так что если долго писать такое, то не морочьтесь, пойдёт и так, можно будет ожидание в пару сек поставить в скрипт, проще же.
Да разве могут дети юга где розы блещут в декабре
Где не разыщешь слова вьюга ни в памяти ни в словаре
Да разве им хоть так хоть вкратце хоть на минуту хоть во сне
Хоть ненароком догадаться что значит думать о весне?
Что значит в мартовские стужи когда отчаянье берёт
Всё ждать и ждать как неуклюже..

YoClickamann

  • Освоившийся
  • **
  • Posts: 28
    • View Profile
Re: Не скриншотится менюшка программы из трея
« Reply #12 on: September 30, 2016, 12:23:57 PM »
И ещё один вопрос вдогонку: а вот в главном окне кликера указывается некий PiD. Его как-то можно использовать, указывать в скриптах через какую-то команду? Или он там в окне просто для красоты? Спасибо вам за быстрые ответы.
« Last Edit: November 29, 2020, 07:04:41 PM by YoClickamann »
Да разве могут дети юга где розы блещут в декабре
Где не разыщешь слова вьюга ни в памяти ни в словаре
Да разве им хоть так хоть вкратце хоть на минуту хоть во сне
Хоть ненароком догадаться что значит думать о весне?
Что значит в мартовские стужи когда отчаянье берёт
Всё ждать и ждать как неуклюже..

YoClickamann

  • Освоившийся
  • **
  • Posts: 28
    • View Profile
Re: Не скриншотится менюшка программы из трея
« Reply #13 on: September 30, 2016, 12:37:52 PM »

GETSCREEN
screenshot("скрин")
должно сохранять скрин,
 Папка screens, рядом с делающим скрины скриптом.


Самое интересное, что если вернутся к теме типа нескринящейся менюшки, то воспользовался командой screenshot(), посмотрел вышедший скрин и, оказывается, на нём видно меню. Сам же шаблончик картинки для поиска я вырезал очень аккуратно, с большим увеличением в редакторе, в него ничего не попало кроме нужного. Да и разных таких шаблонов я переделал не мало, и они всегда работали, иногда правда нужно повозиться с окантовкой и фоном. А тут менюшку скринит, а пункта меню почему-то не видит. Может, какая прозрачность имеет место быть. Ладно, сделаю по-нормальному, через консольку, так по ходу и быстрее будет.
Да разве могут дети юга где розы блещут в декабре
Где не разыщешь слова вьюга ни в памяти ни в словаре
Да разве им хоть так хоть вкратце хоть на минуту хоть во сне
Хоть ненароком догадаться что значит думать о весне?
Что значит в мартовские стужи когда отчаянье берёт
Всё ждать и ждать как неуклюже..

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Не скриншотится менюшка программы из трея
« Reply #14 on: September 30, 2016, 12:39:41 PM »
дробные числа воспринимаются кликером с запятой
Code: (clickermann) [Select]
wait(1.5)
wait(1,5)
:o почему это?