2014-06-07 21 views
1

你好大家,AutoIt的PixelGetColor不工作

我最近下載了一個遊戲,我玩一個機器人,這個機器人所使用的AutoIt在屏幕上自動的動作,旁邊的AutoIt我下載了一些腳本,讓我來自動遊戲動作。我在主電腦和筆記本電腦上下載了這些腳本,因此如果需要的話,我可以在2個帳戶上運行它們。下載是完全一樣的,儘管機器人可以在我的電腦上完美工作,但它在我的筆記本電腦上運行起來很奇怪:

光標似乎能夠到我已明確告訴它去的地方,但一旦它需要imagesearch或pixelsearch它只是停止。該程序不會停止運行,並會在適當的時機繼續執行可執行的操作,但是所有圖像搜索功能都會被忽略。

的PC和筆記本電腦之間的唯一的主要性差異是,電腦是問這裏之前,運行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

$ line = GetLine()的輸出是什麼?美元線有哪些? – Sumsar1812

+0

它在彈出框中獲得一行,但沒有任何反應,光標不會移動到圖像上的corect點。 – user3717416

+0

在另一臺筆記本電腦上試了一下,運行windows 7似乎也起作用。但是我注意到,如果我改變遊戲的分辨率或圖形設置太多,它會停止工作,完全一樣。但是,我一直無法確定它是什麼功能,阻止它正常工作。 – user3717416

回答

0

我知道你的問題是什麼..我想。嘗試將PixelGetColor()的輸出轉換爲十六進制。 另外,當它輸出時,它不包含顏色標籤開頭的「0x」。 所以,你可以說:

#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 

至於沒有工作的圖片搜索,這可能是在AutoHotkey與Windows 8的兼容性由於AutoIt的不具有圖片搜索功能,開發人員使用的AutoHotkey的圖片搜索功能,幷包裹有問題它在一個AutoIt庫中。這可能是問題在哪裏cominh