_PixelSearchRightToLeft

  • Hallo,


    Ich wollte eine UDF für TimBlo machen, die es ermöglicht das PixelSearch von Rechts nach Links sucht.
    Nur es klappt einfach nicht, es kommt kein Rückgabewert, einfach nichts.


    Guckt euch einfach mal die UDF an:
    Func _PixelSearchRightToLeft($iLeft, $iTop, $iRight, $iBottom, $hColour, $iShadeVariation = 0, $iStep = 1)
    Local $p_Search
    Local $i_Left = $iLeft, $i_Right = $iRight, $i_Bottom = $iBottom - 1
    Local $bTrue = False


    If Not IsInt($iLeft) Or Not IsInt($iTop) Or Not IsInt($iRight) Or Not IsInt($iBottom) Or Not StringLen($hColour) = 8 Then
    Return 0
    EndIf


    Do
    If $bTrue = False Then
    $p_Search = PixelSearch($i_Right, $iTop, $i_Right - 1, $i_Bottom - $iTop, $hColour, $iShadeVariation, $iStep)
    ElseIf $bTrue = True Then
    If $i_Right = $iLeft Then
    $i_Right = $iRight
    $p_Search = PixelSearch($i_Right, $iTop, $i_Right, $i_Bottom - $iTop, $hColour, $iShadeVariation, $iStep)
    EndIf
    EndIf


    If $i_Right = $iLeft Then
    $i_Bottom -= 1
    EndIf
    $i_Left += 1
    $i_Right += 1
    $i_Bottom -= 1
    $bTrue = True
    Until IsArray($p_Search)


    Return $p_Search
    EndFunc


    Hier ist die Demo:
    HotKeySet("!e", "_Exit")


    While 1
    $Search = _PixelSearchRightToLeft(0, 0, @DesktopWidth, @DesktopHeight, 0xFFFFFF)
    If $Search = 0 Then
    MsgBox(0, "Fail", "Fail")
    ElseIf IsArray($Search) Then
    MouseMove($Search[0], $Search[1], 0)
    EndIf
    WEnd


    Func _Exit()
    Exit
    EndFunc


    Würde mich freuen wenn ihr mir helfen könntet :)

  • Viel zu kompliziert ;)
    Ganz kurz und einfach:


    Func _PixelSearchRTL($left, $top, $right, $bottom, $color, $shVar=0, $step=1, $hWnd=0)
    If $hWnd = 0 Then $hWnd = WinGetHandle('[active]')
    If $step <> 1 Then $step = 1
    Local $ret
    For $i = $right To $left+1 Step -1
    $ret = PixelSearch($i-1, $top, $i, $bottom, $color, $shVar, $step, $hWnd)
    If Not @error Then Return $ret
    Next
    Return SetError(1,0,0)
    EndFunc


    Edit: Kleine Ergänzung, damit der User $step nicht ungleich 1 wählen kann. Die Funktion basiert ja darauf, dass jeweils ein 1 Pixel breiter Streifen, rechts beginnend bis zum angegebenen $left, abgefragt wird.

  • Hab das auch mal getestet, nur ist das ganze viel zu langsam.


  • Aus der Hilfe zur PixelSearch aus der Beta:

  • ich glaube raupi hat gerad das gesagt was ich wollte...
    wäre es nicht einfacher die Parameter zu drehen?, also
    PixelSearch($rechts, $unten, $links, $oben, $farbe, $shadevar, $step*-1)
    kann das nicht funktionieren??

    Dies ist ein Arzeneimittel.
    Bei Risiken und Haluzinationen fressen sie die Packungsbeilage und schlagen Sie ihren Arzt oder Apotheker.
    Jede Haftung wird abgelent.


    Vielen Dank für Ihre Kundentreue.
    mfg. TimBlo