大家好,
我最近为我玩的游戏下载了一个机器人,这个机器人使用Autoit在屏幕上自动移动,与Autoit一起下载了一些允许我自动化游戏内动作的脚本。我在我的主电脑和笔记本电脑上下载了这些脚本,因此如果需要,我可以在2个帐户上运行它们。下载完全相同,虽然机器人在我的电脑上完美运行,但它在我的笔记本电脑上做了一些奇怪的事情:
光标似乎可以去我特别告诉它去的地方但是一旦它需要imagesearch或pixelsearch它就会停止。程序不会停止运行,并会在正确的时间继续执行它可以执行的操作,但是所有的图像搜索功能都会被遗漏。
个人电脑和笔记本电脑之间唯一的主要区别是笔记本电脑正在运行Windows 8。
我在此之前通过搜索尝试的事情:
我已经读过imagesearch.dll应该在sysWOW64中以便它可以正常工作我相信我已经通过复制DLL文件并将它们粘贴到syswow64中来完成。这没有用。
我也尝试将#requireadmin添加到脚本的顶部,但这也无济于事。
这发生在我下载的所有脚本中。他们都在PC上工作,没有在笔记本电脑上工作。我没有很多理解这个代码,因为我自己没有写。然而,我已经将它自己熟悉了一点,因为我在我的电脑上编辑它以供个人使用并使其工作得很好。所以我认为它在我的笔记本电脑上无法运行必须是一些关于Windows 8或类似的业余错误。
这是一个示例脚本。
#RequireAdmin
#include <Misc.au3>
HotKeySet("{[}", "MakeLock")
HotKeySet("{z}", "Start")
HotKeySet("{ESC}", "_Exit")
HotKeySet("{x}", "Shafts")
HotKeySet("{c}", "Heads")
HotKeySet("{v}", "bsb")
$handle = WinGetHandle("Wurm Online", "")
Global $running=0
Global $shaftLoc
Global $headLoc
Global $shaft=0
Global $head=0
Global $bsb=0
Global $bsbloc
Func _Exit()
Exit
EndFunc ;==>_Exit
Func Getfrombsb()
MouseMove($bsbloc[0], $bsbloc[1], 5)
MouseDown("left")
Sleep(100)
MouseMove($shaftloc[0], $shaftloc[1], 5)
Sleep(100)
MouseUp("left")
sleep(2500)
send ("4")
sleep(250)
Send("{Enter}")
sleep(3000)
EndFunc
Func Shafts()
MsgBox(0, "", "title of items")
$shaft=1
EndFunc
Func Drop()
MouseMove($shaftloc[0], $shaftloc[1], 5)
MouseDown("left")
Sleep(250)
MouseMove($bsbloc[0], $bsbloc[1], 5)
MouseUp("left")
EndFunc
Func bsb()
MsgBox(0, "", "item in bsb")
$bsb=1
EndFunc
Func Heads()
MsgBox(0, "", "Click on what ur continuing")
$head=1
EndFunc
Func continue()
MouseMove($shaftloc[0], $shaftloc[1], 5)
MouseClick("left")
Sleep(100)
MouseMove($shaftloc[0], $shaftloc[1], 5)
MouseClick("right")
Sleep(1000)
$line = GetLine()
If IsArray($line) Then
Local $random2 = Random(200, 250, 1)
MouseMove($line[0], $line[1]+3*16-8, 5)
Sleep($random2-51)
MouseMove($line[0]+120, $line[1]+3*16-8, 5)
Sleep($random2+38)
MouseMove($line[0]+120, $line[1]+3*16-8+2*16, 5)
Sleep(500)
MouseMove($line[0]+200, $line[1]+3*16-8+2*16, 5)
Sleep($random2+161)
MouseMove($line[0]+200, $line[1]+3*16-8+2*16+44, 25)
Sleep($random2)
MouseClick("left")
EndIf
EndFunc
Func Start()
if $running==0 Then
$running=1
TrayTip("", "Macro started", 5)
ElseIf $running==1 Then
$running=0
TrayTip("", "Macro stopped", 5)
EndIf
EndFunc
Func GetLine()
$pos = MouseGetPos()
$samp = $pos
For $i = 0 To 48 Step 1
$samp[0] = $pos[0]+32
$samp[1] = $pos[1]+$i
$s0 = PixelGetColor($samp[0], $samp[1], $handle)
If $s0 == 0xFFFFFF Then
$s1 = PixelGetColor($samp[0]+1, $samp[1], $handle)
If $s1 == 0xFFFFFF Then
$s2 = PixelGetColor($samp[0]+2, $samp[1], $handle)
$s3 = PixelGetColor($samp[0]+3, $samp[1], $handle)
If $s2 == 0xFFFFFF AND $s3 == 0xFFFFFF Then
$line = $samp
ExitLoop
EndIf
EndIf
EndIf
$line = 0
Next
Return $line
EndFunc
While (1)
if _IsPressed("01") And $shaft==1 Then
$shaftloc = MouseGetPos()
$shaft=0
MsgBox(0, "", "shaft loc loaded")
endif
if _IsPressed("01") And $head==1 Then
$headloc = MouseGetPos()
$head=0
MsgBox(0, "", "head loc loaded")
EndIf
if _IsPressed("01") And $bsb==1 Then
$bsbloc = MouseGetPos()
$bsb=0
MsgBox(0, "", "bsb loc loaded")
EndIf
if $running==1 Then
Getfrombsb()
Local $random = Random(24000, 25000, 1)
continue()
Sleep($random)
sleep(500)
Drop()
sleep(2000)
Drop()
sleep(2000)
EndIf
Sleep(10)
WEnd
在确切地看到它做了什么和不做什么之后,我可以看到问题在于下面的代码部分,直到它完成所有事情; $ line = GetLine()
$line = GetLine()
If IsArray($line) Then
Local $random2 = Random(200, 250, 1)
MouseMove($line[0], $line[1]+3*16-8, 5)
Sleep($random2-51)
MouseMove($line[0]+120, $line[1]+3*16-8, 5)
Sleep($random2+38)
MouseMove($line[0]+120, $line[1]+3*16-8+2*16, 5)
Sleep(500)
MouseMove($line[0]+200, $line[1]+3*16-8+2*16, 5)
Sleep($random2+161)
MouseMove($line[0]+200, $line[1]+3*16-8+2*16+44, 25)
Sleep($random2)
MouseClick("left")
EndIf
EndFunc
任何帮助将不胜感激。虽然我不熟悉代码,但我知道如何使用堆栈溢出,因为我的兄弟是.net开发人员。我将标记有助于我和upvote等的问题。
亲切的问候。
答案 0 :(得分:0)
我知道你的问题是什么......我想。尝试将PixelGetColor()的输出转换为十六进制。 此外,当它输出时,它不包括&#34; 0x&#34;在颜色标签的开头。 所以,你可以说:
#Include <Misc.au3> ;for the _ispressed() function
Do
Until _IsPressed("01") ;wait for click
$mouse = MouseGetPos() ;Get cursor info
$color = Hex(PixelGetColor($mouse[0], $mouse[1]), 6) Get info on the pixel under the mouse.
;Lets just say the color is white
If $color == "FFFFFF" Then
MsgBox(0, "Success", "Colors match!")
EndIf
至于ImageSearch无法正常工作,这可能是AutoHotKey与Windows 8的兼容性问题。由于AutoIt没有ImageSearch功能,开发人员使用AutoHotKey的ImageSearch功能,并将其包装成一个AutoIt库。这可能是问题所在的地方