Тема: AHK: Поиск пикселя и щелчок ЛКМ
Когда в опр. точке появляется опр. пискель, то скрипт делает команду, в данном случае - Клик.
Так вот, помогите, в PixelSearch вообще не шарю.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Когда в опр. точке появляется опр. пискель, то скрипт делает команду, в данном случае - Клик.
Так вот, помогите, в PixelSearch вообще не шарю.
Если точка "определена" то известны её координаты.
Если есть понятие "определённый пиксель" то есть значение цвета сего пикселя.
PixelGetColor
Если желаемое действие - клик: MouseClick
На всякий случай: Список команд Autohotkey
Если по принципу множественных кликов когда под курсором нужный цвет, то вот как вариант:
SetTimer, WatchCursor, 100 ; частота таймера
WatchCursor:
MouseGetPos, XPos, YPos
PixelGetColor, CurrentColor, XPos, YPos, Slow RGB
If CurrentColor = 0x0000FF ; к примеру синий
Click ; посылается левый клик с частотой таймера
Return, если принцип есть_цвет_зажал/нет_цвета_отпустил:
SetTimer, WatchCursor1, 100
WatchCursor1:
MouseGetPos, XPos, YPos
PixelSearch,,, XPos-25
, YPos-25
, XPos+25
, YPos+25
, 0x0000FF,, Fast RGB ; зона поиска 50х50 от центра курсора
If !ErrorLevel
{
MouseClick, L,,,,, D
SetTimer, WatchCursor1, Off
SetTimer, WatchCursor2, 100
}
Return
WatchCursor2:
MouseGetPos, XPos, YPos
PixelSearch,,, XPos-25
, YPos-25
, XPos+25
, YPos+25
, 0x0000FF,, Fast RGB
If ErrorLevel
{
MouseClick, L,,,,, U
SetTimer, WatchCursor2, Off
SetTimer, WatchCursor1, 100
}
Return, второй вариант универсальнее, в нём можно расширить зону поиска вокруг курсора, задать оттенки искомого цвета, нет блокировки самого левого клика в то время когда цвет не найден.
Прошу прощения что страрую тему поднимаю.
2 Grey:
Ни один их приведенных вами примеров в D3D не работает -поверял в 3х пректах.
Причины всего 2:
1)AHK использует RGB определение цвета, а все D3D (последние лет 7 точно) используют RGBA .Добавляется альфа канал.
(Приведенный в коде синий цвет, долже быть 0000FFFF в этом случае.)
Можно ли в AHK задать RGBA из документации я не понял. скорее всего нужно делать вызов
сторонней DLL
2)D3D использует X,Y,Z систему координат.
2TonyMontana
Ни один их приведенных вами примеров в D3D не работает...
Вообще-то, кто ищет цвет/изображение, или пытается, что-то от рисовать (поверх) в полноэкранных приложениях делают это при условии, что само приложение запускается в оконном режиме. Это является наиболее простым вариантом, нежели вырисовывать, что-то в Direct3D. Вот так к примеру нахожу нужный цвет в CS:S:
Numpad2::
NumpadDown::
If !hWnd
{
offSet:=25
WinSet, AlwaysOnTop, Off, % "ahk_id"hWnd:=WinActive("A")
WinGetPos, xWnd, yWnd, wWnd, hWnd_, % "ahk_id"hWnd
WinMove, % "ahk_id"hWnd,, 0, 0, A_ScreenWidth, A_ScreenHeight
WinSet, Style, -0xC00000, % "ahk_id"hWnd
}
Loop, % (isEnable:=!isEnable) ? 1:2
SoundBeep, 7500, 100
SetTimer, WatchCursor1, % isEnable ? 100:"Off"
SetTimer, WatchCursor2, Off
SetTimer, WatchCursor3, % isEnable ? 100:"Off"
If !isEnable
SetTimer, RemoveTips, -100
KeyWait, % A_ThisHotkey
Return
~Esc::
KeyWait, Esc
If A_TimeSinceThisHotkey>1000
Goto, ExitScript
Return
WatchCursor1:
MouseGetPos, xPos, yPos
PixelGetColor, currentColor, xPos, yPos, Fast RGB
PixelSearch,,, xPos-offSet
, yPos-offSet
, xPos+offSet
, yPos+offSet
, 0xFFFFFF,, Fast RGB
If !ErrorLevel
{
; MouseClick, L,,,,, D
SetTimer, WatchCursor1, Off
SetTimer, WatchCursor2, 100
ToolTip, % "found!`ncurrent: "currentColor "`nxPos: "xPos ", yPos: "yPos
, A_ScreenWidth-384, A_ScreenHeight-185, 1
ToolTip,,,, 2
SoundBeep, 12500, 100
}
Return
WatchCursor2:
MouseGetPos, xPos, yPos
PixelGetColor, currentColor, xPos, yPos, Fast RGB
PixelSearch,,, xPos-offSet
, yPos-offSet
, xPos+offSet
, yPos+offSet
, 0xFFFFFF,, Fast RGB
If ErrorLevel
{
; MouseClick, L,,,,, U
SetTimer, WatchCursor2, Off
SetTimer, WatchCursor1, 100
ToolTip, % "lost!`ncurrent: "currentColor "`nxPos: "xPos ", yPos: "yPos
, A_ScreenWidth-384, A_ScreenHeight-130, 2
ToolTip,,,, 1
SoundBeep, 750, 100
}
Return
WatchCursor3:
MouseGetPos, xPos2, yPos2
PixelGetColor, currentColor2, xPos2, yPos2, Fast RGB
ToolTip, % "current (cursor): "currentColor2 "`nxPos: "xPos2 ", yPos: "yPos2
, A_ScreenWidth-250, A_ScreenHeight-170, 3
Return
ExitScript:
WinMove, % "ahk_id"hWnd,, xWnd, yWnd, wWnd, hWnd_
WinSet, Style, +0xC00000, % "ahk_id"hWnd
ExitApp
RemoveTips:
ToolTip,,,, 1
ToolTip,,,, 2
ToolTip,,,, 3
ReturnНо такой код не даст результата в BFBC2, всё по тому, что в CS:S курсор приложение "держит" в середине экрана, а в BFBC2 курсор "гуляет" по всему экрану. По этому такой код универсальнее:
OnExit, ExitScript
Numpad2::
NumpadDown::
If !hWnd
{
offSet:=25
WinSet, AlwaysOnTop, Off, % "ahk_id"hWnd:=WinActive("A")
WinGetPos, xWnd, yWnd, wWnd, hWnd_, % "ahk_id"hWnd
WinMove, % "ahk_id"hWnd,, 0, 0, A_ScreenWidth, A_ScreenHeight
WinSet, Style, -0xC00000, % "ahk_id"hWnd
}
Loop, % (isEnable:=!isEnable) ? 1:2
SoundBeep, 7500, 100
SetTimer, WatchCursor1, % isEnable ? 100:"Off"
SetTimer, WatchCursor2, Off
SetTimer, WatchCursor3, % isEnable ? 100:"Off"
If !isEnable
SetTimer, RemoveTips, -100
KeyWait, % A_ThisHotkey
Return
~Esc::
KeyWait, Esc
If A_TimeSinceThisHotkey>1000
Goto, ExitScript
Return
WatchCursor1:
MouseGetPos, xPos, yPos
PixelGetColor, currentColor, xPos, yPos, Fast RGB
PixelSearch,,, A_ScreenWidth//2-offSet
, A_ScreenHeight//2-offSet
, A_ScreenWidth//2+offSet
, A_ScreenHeight//2+offSet
, 0xFFFFFF,, Fast RGB
If !ErrorLevel
{
; MouseClick, L,,,,, D
SetTimer, WatchCursor1, Off
SetTimer, WatchCursor2, 100
ToolTip, % "found!`ncurrent: "currentColor "`nxPos: "xPos ", yPos: "yPos
, A_ScreenWidth-384, A_ScreenHeight-185, 1
ToolTip,,,, 2
SoundBeep, 12500, 100
}
Return
WatchCursor2:
MouseGetPos, xPos, yPos
PixelGetColor, currentColor, xPos, yPos, Fast RGB
PixelSearch,,, A_ScreenWidth//2-offSet
, A_ScreenHeight//2-offSet
, A_ScreenWidth//2+offSet
, A_ScreenHeight//2+offSet
, 0xFFFFFF,, Fast RGB
If ErrorLevel
{
; MouseClick, L,,,,, U
SetTimer, WatchCursor2, Off
SetTimer, WatchCursor1, 100
ToolTip, % "lost!`ncurrent: "currentColor "`nxPos: "xPos ", yPos: "yPos
, A_ScreenWidth-384, A_ScreenHeight-130, 2
ToolTip,,,, 1
SoundBeep, 750, 100
}
Return
WatchCursor3:
MouseGetPos, xPos2, yPos2
PixelGetColor, currentColor2, xPos2, yPos2, Fast RGB
PixelGetColor, currentColor3, A_ScreenWidth//2, A_ScreenHeight//2, Fast RGB
ToolTip, % "current (cursor): "currentColor2 "`nxPos: "xPos2 ", yPos: "yPos2
, A_ScreenWidth-250, A_ScreenHeight-170, 3
ToolTip, % "current (center): "currentColor3
. "`nxPos: "A_ScreenWidth//2 ", yPos: "A_ScreenHeight//2
, A_ScreenWidth-250, A_ScreenHeight-130, 4
Return
RemoveTips:
ToolTip,,,, 1
ToolTip,,,, 2
ToolTip,,,, 3
ToolTip,,,, 4
Return
ExitScript:
WinMove, % "ahk_id"hWnd,, xWnd, yWnd, wWnd, hWnd_
WinSet, Style, +0xC00000, % "ahk_id"hWnd
ExitApp...все D3D (последние лет 7 точно) используют RGBA .
Не вижу проблемы, так как в PixelSearch есть параметр отвечающий за вариацию искомого цвета.
...D3D использует X,Y,Z систему координат.
Мне как-то всё равно на сей счёт, ибо aимбoтaми не занимаюсь. Если нужно сдвинуть курсор, то это прекрасно получается через X, Y.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться