1

Тема: AHK: DllCall SetPixel

Здравствуйте, учусь работать с WinAPI.
Хочу создать точку в блокноте, но что-то идёт не так. В чём дело?)


	hWnd := WinExist("Безымянный")
	hDC := DllCall("GetDC", Ptr, hWnd, Ptr)
	DllCall("SetPixel", "Ptr", hDC, "Int", 50, "int", 60, "Ptr", "CD5C5C")
telegram: bass_devware

2 (изменено: basstech, 2020-12-10 14:19:45)

Re: AHK: DllCall SetPixel

Нашел решение и переделал под нужный лад:


SetPixel("Безымянный", "0x000000", "500", "500", "510", "510")

SetPixel(Title, Color, x1, y1, x2, y2)	{
	hWnd := WinExist(Title)
	hBr  := DllCall( "CreateSolidBrush", UInt, Color )
	hDC := DllCall("GetDC", Ptr, hWnd, Ptr)
	hRgn := DllCall( "CreateEllipticRgn", Int,x1, Int,y1, Int,x2, Int,y2 )
	DllCall( "FillRgn", UInt,hDC, UInt,hRgn, UInt,hBr ) 
	DllCall("ReleaseDC", "uint", 0, "uint", hDC)
}

Постараюсь найти что-то, что поможет не только рисовать, но и писать текст.

telegram: bass_devware

3 (изменено: basstech, 2020-12-10 18:28:15)

Re: AHK: DllCall SetPixel

Постараюсь найти что-то, что поможет не только рисовать, но и писать текст.
Вот что ещё хотел спросить, как заставить точку не исчезать при передвижении окна?

telegram: bass_devware

4 (изменено: basstech, 2020-12-10 18:26:20)

Re: AHK: DllCall SetPixel

Привязка к окну, как оказалось, не работает.

telegram: bass_devware

5 (изменено: teadrinker, 2020-12-10 15:59:30)

Re: AHK: DllCall SetPixel

basstech пишет:

Вот что ещё хотел спросить, как заставить точку не исчезать при передвижении окна?

Передвижение окна тут не при чём, дело в перерисовке окна. Когда окно перерисовывается, ваша точка пропадает. В коде все хэндлы должны быть Ptr, для цифр кавычки не нужны.

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

6

Re: AHK: DllCall SetPixel

basstech, предложения должны начинаться с заглавной буквы и заканчиваться знаками препинания. Смайлик точку не заменяет.
Не следует цитировать предыдущее сообщение целиком. Тем более своё.

http://forum.script-coding.com/viewtopi … 69#p144069
http://forum.script-coding.com/viewtopi … 68#p144068
http://forum.script-coding.com/viewtopi … 66#p144066
http://forum.script-coding.com/viewtopi … 29#p143929
http://forum.script-coding.com/viewtopi … 22#p142522
Исправьте!

7

Re: AHK: DllCall SetPixel

ypppu
Поправил.

teadrinker
По поводу хэндлов, речь идёт о этой строке? Как её запустить?

DllCall("SetPixel", "Ptr", hDC, "Int", 50, "int", 60, "Ptr", "CD5C5C")
telegram: bass_devware

8

Re: AHK: DllCall SetPixel

Хэндлы — это все переменные, которые в вашем (точнее, наверно, где-то скопированном) коде начинаются на h.

basstech пишет:

Как её запустить?

Как-то особо запускать DllCall() не надо, достаточно просто написать её в коде, желательно с правильными параметрами. Чтобы разобраться с ними, придётся почитать описание к api-функции, которую пытаетесь вызвать, в данном случае SetPixel. У вас в последнем параметре непонятно что, тип данных Ptr, а сам параметр строка в кавычках, такого не может быть. В описании видим, что там должна быть структура COLORREF. Это просто число вида 0x00bbggrr, где bb, gg и rr — значения blue, green и red, например, синий цвет будет 0x00FF0000. Тип данных DWORD, соответственно должен быть UInt.

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