Что нового

Баг Баг в функции _ScreenCapture_Capture

Oki

Продвинутый
Сообщения
452
Репутация
62
Код:
#include <ScreenCapture.au3>
MsgBox(4096, "", "Закройте это окно в момент готовности.")
_ScreenCapture_Capture(@ScriptDir & "\screenshot.png", 0, 0, 1500, 1000, True)
Запускаю этот скрипт, подвожу указатель мыши к кнопке "OK" на появившемся MsgBox-окне, кликаю и дожидаюсь результата при неподвижной мышке. И вот результат.screenshot.png

Маркер указателя мыши нарисован не там, где он пребывал. Самое смешное, что этот баг обнаружен при попытке создания демонстрации того, с каким внутренним конфликтом между различными функциями AutoIt работает другой нижеприведённый скрипт.
Код:
#include <ScreenCapture.au3>
MsgBox(4096, "", "Закройте это окно в момент готовности.")
Sleep(100)
$coord = PixelSearch(600, 60, 800, 75, 0x000000)
If @error Then
   MsgBox(4096, "Error", "Error")
Else
   MouseMove($coord[0],$coord[1])
   Sleep(500)
   _ScreenCapture_Capture(@ScriptDir & "\screenshot.png", 0, 0, 850, 90, True)
EndIf
Он отрабатывал нелогично ещё до добавления последней строки, которая и была призвана продемонстрировать видимое мне на экране монитора, но в итоге там оказался свой баг. Похоже на то, что оба бага исходят к той же проблеме, поднятой мной в топике "Работа с координатами указателя мыши на ноутбуках с рекомендуемым масштабированием" (название кликабельно).
Сообщение автоматически объединено:

Оказывается, с этим багом успешно можно бороться костылём, основанным на ответе в другом топике.

https://autoit-script.ru/threads/navedenie-pricela-na-opredelennyj-cvet.28360/#post-155815
Код:
#include <ScreenCapture.au3>
DllCall("User32.dll", "bool", "SetProcessDPIAware")
MsgBox(4096, "", "Закройте это окно в момент готовности.")
_ScreenCapture_Capture(@ScriptDir & "\screenshot.png", 0, 0, 1500, 1000, True)
Имеет смысл сказать об этом в справке.
 
Последнее редактирование:
Автор
Oki

Oki

Продвинутый
Сообщения
452
Репутация
62
Это так теперь называется вызов системной функции?
Костыль это не ругательство на качество куска кода в нём самом, а устранение проблемы, существующей вне костыля, причина которой никуда при этом не исчезает. Вполне себе может быть и вызовом системной функции, и любым абсолютно грамотным куском кода.
 

Khaibit

Осваивающий
Сообщения
103
Репутация
25
Костыль это не ругательство на качество куска кода в нём самом, а устранение проблемы, существующей вне костыля, причина которой никуда при этом не исчезает. Вполне себе может быть и вызовом системной функции, и любым абсолютно грамотным куском кода.
Это не проблема и не баг, если вам нужна поддержка High DPi - вы должны сами добавить это, нигде не написано что autoit сделает это за вас.
 
Автор
Oki

Oki

Продвинутый
Сообщения
452
Репутация
62
Это не проблема и не баг, если вам нужна поддержка High DPi - вы должны сами добавить это, нигде не написано что autoit сделает это за вас.
Как же не баг? Параметр $fCursor функции _ScreenCapture_Capture явно регламентирует захват курсора, а в реальности получается совершенно некорректный результат. Налицо ошибочная отработка параметра. К тому же ошибка не документирована. Любой баг можно объявить фичей, но для этого эту фичу нужно грамотно задокументировать. Вероятно, внутренняя логика требует так и поступить в этом случае.
 
Последнее редактирование:

Khaibit

Осваивающий
Сообщения
103
Репутация
25
Как же не баг? Параметр $fCursor функции _ScreenCapture_Capture явно регламентирует захват курсора, а в реальности получается совершенно некорректный результат. Налицо ошибочная отработка параметра. К тому же ошибка не документирована. Любой баг можно объявить фичей, но для этого эту фичу нужно грамотно задокументировать. Вероятно, внутренняя логика требует так и поступить в этом случае.
Задокументировать? а вы вообще пробовали искать? скажем по запросу "DPI scaling autoit"? информации более чем достаточно, или авторы autoit должны были описывать всё?
Microsoft решили что поддержка масштабирования DPI это выбор разработчика ПО, autoit работает в среде windows согласно документации.
 
Автор
Oki

Oki

Продвинутый
Сообщения
452
Репутация
62
Задокументировать? а вы вообще пробовали искать? скажем по запросу "DPI scaling autoit"? информации более чем достаточно, или авторы autoit должны были описывать всё?
Microsoft решили что поддержка масштабирования DPI это выбор разработчика ПО, autoit работает в среде windows согласно документации.
Это демагогия. Для того, чтобы что-то искать, нужно сначала знать, что это что-то надо искать. В описании функции _ScreenCapture_Capture в справке сказано, что параметр $fCursor управляет захватом курсора, а на деле получается пшик в виде рисования искусственной каши. Упрямство, с которым отстаивается ложная позиция, что это не баг, достойно лучшего применения.
 

Khaibit

Осваивающий
Сообщения
103
Репутация
25
Автор
Oki

Oki

Продвинутый
Сообщения
452
Репутация
62
В библиотеке ScreenCapture.au3 указано имя автора функции _ScreenCapture_Capture, так напишите ему на официальном форуме, расскажите ему про баг, посмотрите что он ответит; или создайте тикет.
А зачем существует раздел для баг-репортов на нашем форуме? Лично меня, собственно, устроило то, что нашёлся костыль. А вот для будущих поколений, пожалуй, неплохо бы в справке сделать дополнение, превратив баг в фичу.
 
Последнее редактирование:
Верх