1

Тема: AHK: DllCall

Здравствуйте.
Влияет ли CoordMode на вызов команды?

DllCall("GetPixel", Ptr, hMemDC, UInt, X, UInt, Y)

Пиксели берёт то от окна без рамки, то с рамкой. Нужно чтобы строго от окна без рамки или с рамкой.

telegram: bass_devware

2

Re: AHK: DllCall

В AHK есть PixelGetColor, DllCall использовать ни к чему.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: DllCall

basstech пишет:

Влияет ли CoordMode на вызов команды?

Разве что на получение X и Y, но это ведь вы делаете уже другой командой. А GetPixel ничего не знает про CoordMode. Это функция Windows API, а не АНК.

4

Re: AHK: DllCall

Как используя WinGetPos получить размеры окна без рамки, не прибегая к вычитанию размера рамки? Или даже в WindowSpy подобным образом определяется размер?

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

telegram: bass_devware

5

Re: AHK: DllCall

У CoordMode есть параметр Client.

6

Re: AHK: DllCall

С помощью WinGetPos можно узнать только координаты всего окна.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: DllCall

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.

Выбирать что..?

telegram: bass_devware

8

Re: AHK: DllCall

basstech, там же ещё второй параметр есть, а у него значение Client.

teadrinker пишет:

С помощью WinGetPos можно узнать только координаты всего окна.

Вопрос-то был про размер.

9

Re: AHK: DllCall

Хотя да, эта команда там в Related не упомянута. Тогда можно использовать API-функцию GetClientRect.

10

Re: AHK: DllCall

YMP
Не совсем понял. Вопрос был о том, узнать размер окна без рамки. CoordMode определяет применение второго парам-ра Client для функций из первого парам-ра.
В первом параметре нет ничего, что укажет wingetpos, что конкретно нужно определять.

telegram: bass_devware

11

Re: AHK: DllCall

YMP
Можно, пожалуйста, пример как применять GetClientRect?

telegram: bass_devware

12 (изменено: YMP, 2020-12-08 19:24:52)

Re: AHK: DllCall


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%

13

Re: AHK: DllCall

YMP
Спасибо, оно! А подобное можно провернуть с WinMove?

telegram: bass_devware

14 (изменено: basstech, 2020-12-08 19:49:11)

Re: AHK: DllCall

YMP
А что это за API функции? Где можно почитать как с ними работать?

telegram: bass_devware

15 (изменено: basstech, 2020-12-08 19:50:55)

Re: AHK: DllCall

YMP
https://docs.microsoft.com/en-us/window … movewindow

Где можно посмотреть как использовать эту функцию в АХК?

telegram: bass_devware

16

Re: AHK: DllCall

basstech, она вызывается через DllCall, как и все они. Только зачем её использовать? В чём выгода против WinMove?

17 (изменено: basstech, 2020-12-08 20:13:03)

Re: AHK: DllCall

YMP
Дело в том, что мне важно получить размер окна без рамки и изменить исходя из этого размер другого, а WinMove выставляет размер с учётом рамки. В теории, окей, я теперь могу вычесть значение окна рамки и без рамки и использовать WinMove, но это не очень красиво как по мне.

DllCall, я понимаю, где можно почитать как заполнять DllCall? Это как регулярки, один раз выучи и всё)
Или чтобы использовать DllCall нужно знать как написать код на плюсах и от этого прыгать?

telegram: bass_devware

18

Re: AHK: DllCall

basstech, MoveWindow тоже работает с окном, а не с клиентской его частью. Можно вычислить размеры окна по размерам клиентской области через API-функцию AdjustWindowRect.

DllCall описана в справке АНК.

19

Re: AHK: DllCall

YMP
Спасибо за помощь!

telegram: bass_devware

20

Re: AHK: DllCall

YMP
Можно ещё маленький вопросик?

DllCall("MoveWindow", UniqueID, "int", "5", "int", "5", "int", "300", "int", "300", "bool", true)

Я не совсем понял в какой последовательности и как указывать тип параметров.

telegram: bass_devware

21

Re: AHK: DllCall


DllCall("MoveWindow", "ptr", UniqueID, "int", 5, "int", 5, "int", 300, "int", 300, "int", true)

Числа пишутся без кавычек. Типа "bool" в DllCall нет, если только недавно не добавили. Вместо него можно "int". Для типа HANDLE, HWND и т.п. используется "ptr".

22

Re: AHK: DllCall

YMP
Спасибо!!

telegram: bass_devware