1 (изменено: Slame12, 2023-06-06 03:29:29)

Тема: AHK: Нахождение пикселя

Всех приветствую кто читает данный пост. Суть в том что мой скрипт должен находить пиксель и после этого нажимать кнопку D на клавиатуре, но при запуске выдаёт ошибку . текст ошибки :
Error at line 1.
Line Text: #Include <Gdip.ahk>
Error: Function library not found.
The program will exit.
Сам скрипт :

#Include <Gdip_All.ahk>
#SingleInstance, Force
#NoEnv
CoordMode, Pixel, Screen

; Загрузка изображения
PicPath := "autoblkpic.png"
Pic := ImageLoad(PicPath)

; Бесконечный цикл
Loop
{
; Поиск изображения на экране
Coord := ImageSearch(Pic, 0, 0, A_ScreenWidth, A_ScreenHeight, "0|0|A|B")

; Если изображение найдено, нажать клавишу "D"
if Coord
{
SendInput, d
Sleep, 100
}

; Пауза перед следующей проверкой
Sleep, 100
}

; Функция для загрузки изображения
ImageLoad(Path)
{
Static GdipToken := Gdip_Startup()
Bitmap := Gdip_CreateBitmapFromFile(Path)
Return Bitmap
}

; Функция для поиска изображения на экране
ImageSearch(Bitmap, X1, Y1, X2, Y2, Color)
{
Static GdipToken := Gdip_Startup()
Gdip_GetImageWidth(Bitmap, Width)
Gdip_GetImageHeight(Bitmap, Height)
BitmapData := Gdip_LockBits(Bitmap, 0, 0, Width, Height, 3, 0)
Scan0 := NumGet(BitmapData + 8)
Stride := NumGet(BitmapData + 12)
PixelFormat := NumGet(BitmapData + 16)
ColorDepth := PixelFormat >> 8
PixelSize := ColorDepth >> 3
if (PixelSize != 3)
Return 0
VarSetCapacity(ARGB, 4)
VarSetCapacity(Pixel, 3)
Loop % Y2-Y1
{
Y := Y1 + A_Index - 1
Loop % X2-X1
{
X := X1 + A_Index - 1
Pixel := NumGet(Scan0 + (Y * Stride) + (X * PixelSize), 3)
Pixel := (Pixel & 0xFF) | ((Pixel >> 16) & 0xFF00) | ((Pixel << 16) & 0xFF0000)
ARGB := Pixel | 0xFF000000
if (Color = "0|0|A|B")
{
if (Gdip_BitmapGetPixel(Bitmap, X, Y, Pixel) = 0)
Return X "|" Y
}
else
{
if (Pixel = Color)
Return X "|" Y
}
}
}
Gdip_UnlockBits(Bitmap, BitmapData)
Return 0
}

; Функция для освобождения ресурсов
OnExit("Cleanup")
Cleanup()
{
Gdip_DisposeImage(Pic)
Gdip_Shutdown(GdipToken)
}

в одной папке находится так же Gdip.ahk и картинка с пикселем , в чем проблема я не понимаю .

2

Re: AHK: Нахождение пикселя

Slame12, добро пожаловать на форум! Ознакомьтесь, пожалуйста, с Правилами, отредактируйте свой пост. Обратите внимание на составление заголовков, оформление кода и ссылок, заглавные буквы в начале и точки в конце предложений.

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

3

Re: AHK: Нахождение пикселя

teadrinker
Вроде сделал всё как надо теперь.

4

Re: AHK: Нахождение пикселя

Slame12 пишет:
#Include <Gdip_All.ahk>

Угловые скобки тут не нужны. Название файла должно соответствовать реальному. Если у вас Gdip.ahk, то откуда взялось Gdip_All.ahk?

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

5

Re: AHK: Нахождение пикселя

teadrinker
Извиняюсь скинул не ту версию скрипта в котором я изменил название этой строчки 

#Include <Gdip_All.ahk>

. После изменения названия на правильный появились другие ошибки :
Error: Too many parameters passed to function.
Specifically: Gdip_GetimageWidth(Bitmap, Width)
Line#
029:
030: Static,GdipToken, Gdip_Startup0
031: Bitmap : = Gdip_Create Bitmap FromFile(Path)
032: Return, Bitmap
033: }
037: {
038: Static,GdipToken,Gdip_Startup()
039: Gdip_GetimageWidth(Bitmap, Width)
040: Gdip_GetimageHeight(Bitmap, Height)
041: BitmapData := Gdip_Lock Bits(Bitmap, 0, 0, Width, Height,
3, 0)
042: Scan0:= NumGet(BitmapData + 8)
043: Stride := Num Get(BitmapData + 12)
044: Pixel Format: = Num Get(BitmapData + 16)
045: Color Depth := Pixel Format > > 8
046: Pixel Size := Color Depth >> 3
The program will exit.

6

Re: AHK: Нахождение пикселя

Error: Too many parameters passed to function.

Понимаете, что это значит?

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

7

Re: AHK: Нахождение пикселя

teadrinker
Не особо, если честно.

8

Re: AHK: Нахождение пикселя

А что именно непонятно? Перевести можете?

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

9

Re: AHK: Нахождение пикселя

teadrinker
Перевёл то я сразу , непонятно что делать чтобы это пофиксить.

10

Re: AHK: Нахождение пикселя

А как именно перевели?

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

11

Re: AHK: Нахождение пикселя

teadrinker
"Слишком много параметров передано функции"

12

Re: AHK: Нахождение пикселя

Ну вот, найдите соответствующую функцию, посмотрите, какие параметры она принимает, что возвращает. Код вы откуда взяли? ChatGPT?

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

13

Re: AHK: Нахождение пикселя

teadrinker
Всё верно, скрипт брал готовый через бота.

14

Re: AHK: Нахождение пикселя

Напрасно, ChatGPT не имеет смысла использовать для AHK. В любом случае, чтобы им пользоваться, нужно достаточно разбираться в материале, чтобы самостоятельно исправить ошибки.
Если задача научиться что-то программировать самостоятельно, то Gdi Plus — это совсем не та тема, с которой стоило бы начинать. Это примерно, как начинать изучать математику с интегралов и производных. Начните с туториала из справки.
Если задача получить готовый результат, у нас есть коммерческий раздел, создайте тему там, опишите задачу, укажите, сколько готовы заплатить за решение.

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

15

Re: AHK: Нахождение пикселя

teadrinker
Спасибо за полезную информацию.

16

Re: AHK: Нахождение пикселя

Slame12

#Include <Gdip_All.ahk>

Нужно использовать если библиотеки в отдельной папке Lib

Если файл Gdip_All.ahk просто рядом с скриптом то его не нужно обрамлять в < >.

#Include Gdip_All.ahk