Author Topic: Альтернатива привязке - работа с несколькими окнами, решение черного окна, и тп.  (Read 38010 times)

0 Members and 1 Guest are viewing this topic.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
"После этого HWND на главной форме меняться уже не будет..." — вот это момент вообще не понял. Меняется за милую душу когда мышью елозишь.
:o У тебя точно программа Clickermann?  ;D ;D
После привязки, когда горит "вкл" - не меняется. Ты не пропустил слова "на главной форме"? НЕ В РЕДАКТОРЕ.



kudrjashv

  • Освоившийся
  • **
  • Posts: 26
    • View Profile
А скроллинг мышью как делать? Конкретно есть код крутить колесо мыши вниз, т.е WHEELDOWN?
Я пока только так смог (для вконтакте):
Code: (clickermann) [Select]
A_MDOWN (1000,560, 131540) //скролл вниз
A_MOVE(1000,600, 131540)
WAIT(1)
A_LCLICK (1000,650, 131540)
HALT

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
А скроллинг мышью как делать? Конкретно есть код крутить колесо мыши вниз, т.е WHEELDOWN?
А про WHEELDOWN в привязке забудте. Колесо мыши действует по разному, в зависимости от положения указателя.
Используй клавиатуру, PageDown/PageUp, стрелки вверх/вниз.
« Last Edit: January 16, 2017, 03:22:27 PM by Vint »



fisher

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Добрый день.

Осваиваю Clickermann, делаю скриншот окна Chrome с flash игрой.
При использовании
Code: [Select]
GETSCREEN
SCREENSHOT
получаю черный экран.

Пробую альтернативный вариант из этой темы.
При указании hwnd в явном виде, все работает, 
Code: [Select]
$hwnd1 = 3805494а при указании имени окна - получаю черный экран (правда с какой то белой полосой).
Но если изменить имя, например добавив какой то символ, то Clickermann ругается, т.е. дело не в неправильном имени.
Code: [Select]
$hwnd2 = WNDFIND ("Имя - Google Chrome")
Направьте пожалуйста на путь истинный, как использовать по наименованию окна?
[spoiler=Пример кода]
Code: [Select]
#include "alt_winmode.cms"

$hwnd1 = 3805494
$hwnd2 = WNDFIND ("Имя - Google Chrome")

while($var1 < 2)
   A_GETSCREEN(0, 0, 0, 0, $hwnd1)
   A_SCREENSHOTEX(0, 0, 0, 0, Number, 0,  $hwnd1)
 
   inc($var1)
end_cyc

while($var2 < 2)
   A_GETSCREEN(0, 0, 0, 0, $hwnd2)
   A_SCREENSHOTEX(0, 0, 0, 0, Name, 0,  $hwnd2)
 
   inc($var2)
end_cyc
[/spoiler]

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
окна Chrome с flash игрой.
...
Направьте пожалуйста на путь истинный, как использовать по наименованию окна?
Ключевое слово "flash"!  Окно флэша это не окно браузера. Привязываться нужно именно к окну флэша, по имени это не сделать, только по координатам.


Ещё на всякий случай вот это пусть тут полежит.
http://crapware.aidf.org/forum/index.php?topic=952.msg4188#msg4188


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Переписал A_KEYSTRING, если кому интересно... http://crapware.aidf.org/forum/index.php?topic=2111.msg12566#msg12566
Теперь он стабильно печатает на любом языке с любой раскладкой + все основные символы. если нужны и неосновные символы, можно добавить, можно и добавить шрифты других языков, закорючки там всякие, иероглифы, смайлики и прочее...

Только для версии 4.13 b3 http://crapware.aidf.org/forum/index.php?topic=356.msg19022#msg19022

fisher

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Ключевое слово "flash"!  Окно флэша это не окно браузера. Привязываться нужно именно к окну флэша, по имени это не сделать, только по координатам.

Прошу прощения, пропустил Ваш ответ. Спасибо. С hwnd разобрался, получаю нажатием в окне при старте скрипта.

Вопрос, как убрать окно к которому привязал Clickermann? Видеокарта Radeon вроде не поддерживает второй монитор (при отсутствии такового). Установил программу менеджер рабочего стола  Dexpot, но она как я понял просто эмулирует столы, отображая программы соответствующие выбранному столу, как следствие, нужное окно оказывается под другими. Нашел другой вариант Desktops v2.0 - добавляет реальный рабочий стол, окно отображается как нужно, Clickermann его видит! Но, есть другая засада: изображение другого рабочего стола не обновляется. Т.е. я написал:
Code: [Select]
A_GETSCREEN(0, 0, 0, 0, $hwnd1)
A_SCREENSHOTEX(0, 0, 0, 0, pref, 0,  $hwnd1)
WAIT(2)

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

Подскажите пожалуйста, каким образом соблюсти условие:

"нельзя чтобы окно было закрыто другим окном"

позволив работать Clickermann и отвоевать возможность пользоваться ПК самому.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Desktops v2.0 не вариант, его уже пробовали использовать. Там ничего не отрисовывается на неактивных столах. Выполняется или нет, не помню.

Почему не задвинуть окно за край до максимума?
Хочешь руками, хочешь командой

в угол
Code: (clickermann) [Select]
WNDPOS(hwnd, $_xmax, $_ymax)
впритык вправо
Code: (clickermann) [Select]
WNDPOS(hwnd, $_xmax, 0)


fisher

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Почему не задвинуть окно за край до максимума?
Хочешь руками, хочешь командой

Спасибо, сейчас попробую. Минус, что процесс не видно, контролировать хочется  :)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Минус, что процесс не видно, контролировать хочется  :)
Хм. А зачем тогда привязка?

Если время от времени нужно глянуть, хотя на что там смотреть, то можно сделать поток с горячей клавишей вытаскивающий/убирающий окно.
Code: (clickermann) [Select]
THREAD(whide, 1)
    IF(ISKEYDOWN(#F9) = 1)
        $hiden = $hiden ^ 1
        IF($hiden = 1)
            WNDPOS(WNDFIND("Входящие", 0), $_xmax, 0)
        ELSE
            WNDPOS(WNDFIND("Входящие", 0), 50, 50)
        END_IF
        WAITMS(500)
    ELSE
        WAITMS(100)
    END_IF
END_THREAD

//основной скрипт
« Last Edit: April 27, 2017, 04:04:31 PM by Vint »


fisher

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Супер. Еще раз спасибо. Мысль была именно в этом направлении, но до раздельных потоков еще не дошла.
Все что делал, заработало!

fisher

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Добрый день.

Рано я порадовался...  :( После того как экран задвинут, картинка почему то не обновляется.
Как задвигаю окно - скриншот делается нужного окна, но картинка одна и та же,
как только возвращаю - скриншот начинает обновляться.

В общем аналогично Desktops v2.0 получается.
Windows 8.1. Clickermann v4.12.001

Код (лишнее убрал):
Code: [Select]
#include "alt_winmode.cms"
LOGCLEAR    // очищаем лог
// Получение hwnd окна
HINTPOPUP ("нажмите СКМ для запуска")
WHILE(iskeydown(4)=0) // ждёт  нажатие левой=1 (средней=4) кнопки мыши
   WAITMS(50)
END_CYC

$hwnd1=HGET ($_xmouse, $_ymouse) // выбор окна при нажатии СКМ
print ("hwnd окна:", $hwnd1)

WHILE(iskeydown(4)=1) // ждёт  отпускание левой=1 (средней=4) кнопки мыши
   WAITMS(50)
END_CYC

THREAD(whide, 1)
   IF(ISKEYDOWN(#F9) = 1)
      $hiden = $hiden ^ 1
      IF($hiden = 1)
         WNDPOS(WNDFIND("Mozilla Firefox", 0), $_xmax, 0)
      ELSE
         WNDPOS(WNDFIND("Mozilla Firefox", 0), 0, 0)
      END_IF
      WAITMS(500)
   ELSE
      WAITMS(100)
   END_IF
END_THREAD

CYCLE:  // основной цикл

A_GETSCREEN(0, 0, $_xmax, $_ymax, $hwnd1)
A_COLORMODE(6, 0, 0, $_xmax, $_ymax, $hwnd1)
A_SCREENSHOTEX(0, 0, 0, 0, "Wind_", 0,  $hwnd1)
WAIT(30)

GOTo (CYCLE)

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
немного не правильно, у тебя гетскрин и колормод выходит за пределы экрана. в место $_xmax, $_ymax пиши 0, 0.
в версии 4.13 это даже приводит к ошибке при выполнении COLORMODE

пример ошибки в версии 4.13:
Code: (clickermann) [Select]
GETSCREEN(0,0, $_xmax+10,$_ymax+10)
COLORMODE(6, 0,0, $_xmax+10,$_ymax+10)

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