Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: clicker_student on April 01, 2019, 11:36:01 PM

Title: WNDPOS может двигать системные диалоговые окна?
Post by: clicker_student on April 01, 2019, 11:36:01 PM
Не могу понять странное поведение. У меня скрипт кликает в программе на иконку, которая открывает станлартное диалоговое окно системы Windows для выбора файла. Для красоты я решил это диалаговое окно выровнять и установить координаты/размеры с помощью
Code: [Select]
   // получим координаты окна "Выбрать файл для загрузки"
   WNDGETINFO ($hwnd_load_file, $x_loadfile, $y_loadfile, $w_loadfile, $h_loadfile)
   $line = STRCONCAT("Координаты окна 'Загрузить скрипт из файла': x = ", $x_loadfile,", $y = ", $y_loadfile,", $w = ", $w_loadfile, ", $h = ", $h_loadfile)
   TFWRITE("log.txt", $line)
   TFWRITE("log.txt", "Изменим координаты окна 'Загрузить скрипт из файла'")
   // установим размеры окна "Выбрать файл для загрузки" для стабильности работы
   WNDSIZE($hwnd_load_file, 600, 400)
   //  переместим окно "Выбрать файл для загрузки" в заданную точку
   WNDPOS($hwnd_load_file, 300, 300)

После изменения координат/размеров функций я проверяю эти значения
Code: [Select]
// получим координаты окна "Выбрать файл для загрузки"
WNDGETINFO ($hwnd_load_file, $x_loadfile, $y_loadfile, $w_loadfile, $h_loadfile)
$line = STRCONCAT("Координаты окна 'Загрузить скрипт из файла': x = ", $x_loadfile,", $y = ", $y_loadfile,", $w = ", $w_loadfile, ", $h = ", $h_loadfile)
TFWRITE("log.txt", $line)
Вижу такой лог
Code: [Select]
Найдена иконка 'Загрузить скрипт из файла'
Найден диалог 'Загрузить скрипт из файла', hwnd = 66862
Координаты окна 'Загрузить скрипт из файла': x = 168, $y = 97, $w = 464, $h = 331
Изменим координаты окна 'Загрузить скрипт из файла'
Координаты окна 'Загрузить скрипт из файла': x = 468, $y = 397, $w = 600, $h = 400

И тут я столкнулся с двумя странностями:
1. Видно, что новые координаты изменились относительно старых. Вместо того чтобы записать абсолютные координаты, WNDPOS() прибавила к старым координатам по 300 пикселей. При этом  WNDSIZE() отработала как надо   размеры окна изменились (виртуально)
2. После изменения окна я делаю скриншот. И на нем видно окно на самом деле никуда не сдвинулось и не изменило размеров.

Кто-то сталкивался с таким уже? Как это понимать и как решать, подскажите пожалуйста.
Title: Re: WNDPOS может двигать системные диалоговые окна?
Post by: dramster on April 02, 2019, 09:06:12 PM

Кто-то сталкивался с таким уже? Как это понимать и как решать, подскажите пожалуйста.


Не замечал такого. Скорее всего hwnd не верный. Стандартное окно состоит из множества "полей" и у каждого свой hwnd.
Или попробуй менять размеры и положение окна с помощью WNDSETINFO.

Title: Re: WNDPOS может двигать системные диалоговые окна?
Post by: clicker_student on April 02, 2019, 10:15:43 PM

Не замечал такого. Скорее всего hwnd не верный. Стандартное окно состоит из множества "полей" и у каждого свой hwnd.
Или попробуй менять размеры и положение окна с помощью WNDSETINFO.
Черт, вы правы! Не видел вашего ответа и только что сделал такое же открытие!  :D
Я искал окно диалога очень просто - поделил всю область на 9 секторов и обходил их в цикле мышкой, в кажой точке запрашивал  HWND через $hwnd_current = HGET($x_current , $y_current) . И наивно полагал, что нахожу окно диалога.

На самом деле я "удачно" попадал на какие-то другие элементы. Выяснил это ручными экспериментами. Два дня голову ломал, спасибо Вам за помощь!