#autohotkey
#автоотключение
Вопрос:
У меня есть простой скрипт, который ищет указанный цветной пиксель в ограниченной области, затем выполняет перемещение мыши этого пикселя в указанные координаты x, y. это выглядит следующим образом (добавляется удержание элемента управления, потому что его нужно нажимать при перемещении товара):
#ifwinactive
F10::
PixelSearch, ItemX, ItemY, 1800, 600, 1700, 500, 0xFFE047, 1 , RGB FAST
if ErrorLevel = 0
Mousemove, ItemX, ItemY, 0
Send, {lbutton down}
sleep, 20
Send, {lctrl down}
Random x, 1600, 1700
Random y, 590, 655
Mousemove, x, y, 0
Send, {lbutton up}
Send, {lctrl up}
return
Он отлично работает, но берет под контроль мою МЫШЬ, чего я не хочу, поэтому я пытаюсь изменить его для выполнения действий, не беря под контроль мою мышь. Я пытался выполнить поиск, используя controlclick, но это не могло справиться с перетаскиванием, затем я прочитал о postMessage, который я не совсем понимаю, но я пришел с таким сценарием (не до конца понимаю вызовы dll, поэтому, скорее всего, он работает не так, как задумано):
#ifwinactive
x := 1650
y := 620
F10::
PixelSearch, ItemX, ItemY, 1900, 600, 1750, 500, 0xFFC661, 1, RGB Fast
CoordMode, Pixel, Screen
if !hWnd := DllCall("WindowFromPoint", Int,ItemX, Int,ItemY, Ptr)
if !hWnd := DllCall("WindowFromPoint", UInt64,(ItemXamp;0xFFC661)|(ItemY<<32), Ptr)
if !hWnd := DllCall("WindowFromPoint", UInt64, x|(y << 32), Ptr)
return
VarSetCapacity(POINT, 8, 0)
NumPut(ItemX, POINT, 0, "Int"), NumPut(ItemY, POINT, 4, "Int")
DllCall("user32ScreenToClient", Ptr,hWnd, Ptr,amp;POINT)
ItemX := NumGet(POINT, 0, "Int"), ItemY := NumGet(POINT, 4, "Int")
if ErrorLevel
PostMessage, 0x0200, 0, ItemXamp;0xFFC661|ItemY<<16,, % "ahk_id " hWnd ;WM_MOUSEMOVE
sleep, 5
PostMessage, 0x0201, 0, ItemXamp;0xFFC661|ItemY<<16,, % "ahk_id " hWnd ;WM_LBUTTONDOWN
sleep, 5
PostMessage, 0x0200, 0, x|y<<16,, % "ahk_id " hWnd ;WM_MOUSEMOVE
sleep, 5
PostMessage, 0x0202, 0, x|y<<16,, % "ahk_id " hWnd ;WM_LBUTTONUP
sleep, 5
return
Существует проблема с этим сценарием, на самом деле он действует следующим образом: поиск пикселя> если он есть> выполнять отправку сообщений под моим курсором (фактически перемещая вещи под мышкой в указанные x, y.
В то время как я хочу искать пиксель, выберите этот пиксель и переместите его. Возможно ли это вообще без управления моей мышью?
РЕДАКТИРОВАТЬ! НОВЫЙ КОД
#ifwinactive
CoordMode, Pixel , Screen
x := 1650
y := 620
lparam := pX | (pY << 16)
lparam2 := x | (y << 16)
f10::
PixelSearch, pX, pY, 1900, 1000, 1750, 500, 0xFFE047, 1, Fast
if Errorlevel
{
PostMessage, 0x0200, 0, %lparam%,, ahk_exe something.exe ;WM_MOUSEMOVE
sleep, 10
PostMessage, 0x0201, 0x0001, %lparam%,, ahk_exe something.exe ;WM_LBUTTONDOWN
sleep, 10
PostMessage, 0x0200, 0x0001, %lparam2%,, ahk_exe something.exe ;WM_MOUSEMOVE
sleep, 10
PostMessage, 0x0202, 0, %lparam2%,, ahk_exe something.exe ;WM_LBUTTONUP
}
return
Комментарии:
1. Это стандартная функциональность в AHK, и именно так она работает. Если вы хотите сделать это так, как вы просите, вам нужно сделать что-то за пределами возможностей AHK, поскольку вы хотите, чтобы операционная система выполняла команды мыши, фактически не влияя на указатель мыши.
2. Я был вдохновлен этим: autohotkey.com/boards/viewtopic.php?t=34943 Этот скрипт ищет пиксель и раскрашивает его — протестировано на sketch.io . Действительно, он все еще работает под моим курсором, но в то же время он окрашивает пиксели при обнаружении и не контролирует мою мышь.
3. Вы действительно должны задать этот вопрос на форуме AHK. 😉
4. Выполнимо это или нет, полностью зависит от того, как приложение, которое вы пытаетесь выполнить, проверяет действия мыши. Если он отвечает на эти сообщения Windows, то это, вероятно, выполнимо с ними. Для какого приложения вы пытаетесь это сделать? Дает ли тестирование некоторых из этих
PostMessage
команд какие-либо результаты? В любом случае, если это выполнимо, я бы очень неохотно назвал это «за пределами возможностей AHK» .5. Второй опубликованный мной скрипт, похоже, игнорирует pixelsearch, но на самом деле выполняет
PostMessage
ввод. Приложение, с которым я собираюсь его использовать, — это ИГРА. Я бы назвал это простым ботом, который ищет pixelcolor (gold) и подбирает его к моему оборудованию, не беря под контроль мою мышь.