Тема: AHK: DllCall
Здравствуйте.
Влияет ли CoordMode на вызов команды?
DllCall("GetPixel", Ptr, hMemDC, UInt, X, UInt, Y)
Пиксели берёт то от окна без рамки, то с рамкой. Нужно чтобы строго от окна без рамки или с рамкой.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Здравствуйте.
Влияет ли CoordMode на вызов команды?
DllCall("GetPixel", Ptr, hMemDC, UInt, X, UInt, Y)
Пиксели берёт то от окна без рамки, то с рамкой. Нужно чтобы строго от окна без рамки или с рамкой.
В AHK есть PixelGetColor, DllCall использовать ни к чему.
Влияет ли CoordMode на вызов команды?
Разве что на получение X и Y, но это ведь вы делаете уже другой командой. А GetPixel ничего не знает про CoordMode. Это функция Windows API, а не АНК.
Как используя WinGetPos получить размеры окна без рамки, не прибегая к вычитанию размера рамки? Или даже в WindowSpy подобным образом определяется размер?
Но даже если так, то это не совсем подходит т.к. выставляя определённый размер окна, окно изменит свой размер к ближайшему указанному вами размеру.
У CoordMode есть параметр Client.
С помощью WinGetPos можно узнать только координаты всего окна.
YMP
Из параметров
ToolTip: Affects ToolTip.
Pixel: Affects PixelGetColor, PixelSearch, and ImageSearch.
Mouse: Affects MouseGetPos, Click, and MouseMove/Click/Drag.
Caret: Affects the built-in variables A_CaretX and A_CaretY.
Menu: Affects the Menu Show command when coordinates are specified for it.
Выбирать что..?
basstech, там же ещё второй параметр есть, а у него значение Client.
С помощью WinGetPos можно узнать только координаты всего окна.
Вопрос-то был про размер.
Хотя да, эта команда там в Related не упомянута. Тогда можно использовать API-функцию GetClientRect.
YMP
Не совсем понял. Вопрос был о том, узнать размер окна без рамки. CoordMode определяет применение второго парам-ра Client для функций из первого парам-ра.
В первом параметре нет ничего, что укажет wingetpos, что конкретно нужно определять.
YMP
Можно, пожалуйста, пример как применять GetClientRect?
Hwnd := WinExist("Window Title")
VarSetCapacity(Rect, 16)
DllCall("GetClientRect", "ptr", Hwnd, "ptr", &Rect)
width := NumGet(Rect, 8, "uint")
height := NumGet(Rect, 12, "uint")
MsgBox, %width% %height%
YMP
Спасибо, оно! А подобное можно провернуть с WinMove?
YMP
А что это за API функции? Где можно почитать как с ними работать?
YMP
https://docs.microsoft.com/en-us/window … movewindow
Где можно посмотреть как использовать эту функцию в АХК?
basstech, она вызывается через DllCall, как и все они. Только зачем её использовать? В чём выгода против WinMove?
YMP
Дело в том, что мне важно получить размер окна без рамки и изменить исходя из этого размер другого, а WinMove выставляет размер с учётом рамки. В теории, окей, я теперь могу вычесть значение окна рамки и без рамки и использовать WinMove, но это не очень красиво как по мне.
DllCall, я понимаю, где можно почитать как заполнять DllCall? Это как регулярки, один раз выучи и всё)
Или чтобы использовать DllCall нужно знать как написать код на плюсах и от этого прыгать?
basstech, MoveWindow тоже работает с окном, а не с клиентской его частью. Можно вычислить размеры окна по размерам клиентской области через API-функцию AdjustWindowRect.
DllCall описана в справке АНК.
YMP
Спасибо за помощь!
YMP
Можно ещё маленький вопросик?
DllCall("MoveWindow", UniqueID, "int", "5", "int", "5", "int", "300", "int", "300", "bool", true)
Я не совсем понял в какой последовательности и как указывать тип параметров.
DllCall("MoveWindow", "ptr", UniqueID, "int", 5, "int", 5, "int", 300, "int", 300, "int", true)
Числа пишутся без кавычек. Типа "bool" в DllCall нет, если только недавно не добавили. Вместо него можно "int". Для типа HANDLE, HWND и т.п. используется "ptr".
YMP
Спасибо!!
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться