Author Topic: WNDPOS может двигать системные диалоговые окна?  (Read 1728 times)

0 Members and 3 Guests are viewing this topic.

clicker_student

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Не могу понять странное поведение. У меня скрипт кликает в программе на иконку, которая открывает станлартное диалоговое окно системы 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. После изменения окна я делаю скриншот. И на нем видно окно на самом деле никуда не сдвинулось и не изменило размеров.

Кто-то сталкивался с таким уже? Как это понимать и как решать, подскажите пожалуйста.
« Last Edit: April 01, 2019, 11:39:11 PM by clicker_student »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile

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


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


clicker_student

  • Освоившийся
  • **
  • Posts: 25
    • View Profile

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

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