自动PixelGetColor无法正常工作

时间:2014-06-07 08:51:26

标签: windows-8 autoit

大家好,

我最近为我玩的游戏下载了一个机器人,这个机器人使用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等的问题。

亲切的问候。

1 个答案:

答案 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库。这可能是问题所在的地方