Hallo Community,
ich automatisiere im Moment Leinwände bei uns im Unternehmen. Ich muss verschiedene Fenster öffnen und an bestimmte positionen (mit anmelden usw) platzieren.
Für Locale fenster ist das alles ja kein problem.
Das größere Problem stellen dann die Terminalserver dar. Dort muss ich dann mit Pixelsearch arbeiten um die Icons zu finden und festzustellen ob ein bestimmtes fenster schon geöffnet ist für die folgeactionen.
Es ist mir zu nervig gewesen jedes icon selber zu untersuchen und koordinaten und farbe festzustellen. Dazu habe ich mir dann eine funktion geschrieben.
Ich hab wohl irgendwo nen Denkfehler an dem ich nicht mehr weiterkomme. Vll. kann mir ja einer helfen.
Funktion erwartet die start farbe und dann ein Array mit RGB;X (zu start);Y(zu start)
Spoiler anzeigen
Func _findicon($a, ByRef $Array)
;~ Funktionsname: _findicon Ein bestimmtes Icon finden
;~ Parameter: ByRef $Array Array mit Position und HEX Farbe des Pixel
;~ ByRef $a start farbe nach der gesucht werden soll
;~ gibt array mit koordinaten für startpixel zurück
;######
;# Array [x][3]
;# Spalte 0 RGB HEX
;# Spalte 1 Pos x
;# Spalte 2 Pos y
;######
;Prüfen ob übergebenes Array auch ein Array ist, wenn nicht wird @error auf '1' gesetzt
;und die Funktion mit Rückgabe von '0' beendet.
If ( Not IsArray($Array) ) Then
SetError(1)
Return 0
EndIf
;#
;# Prüfen ob Parameter im Array korrekt sind
;#
local $asize1 = UBound($Array, 1) ;Größe des Array
local $asize2 = UBound($Array, 2) ;Größe des Array
Local $xbegin = 10
local $xend = 1000
local $ybegin = 10
Local $yend = 1000
local $i = 0
local $startcol = $a
$startcol = "0x" & $startcol
for $ybegin = 1 to 768
$coord = PixelSearch( $xbegin, $ybegin, $xend, $yend, $startcol)
If Not @error Then
MouseMove ( $coord[0], $coord[1])
While $i < $asize1
$ref_color = $Array[$i][0]
$x = $Array[$i][1]
$y = $Array[$i][2]
if Hex(PixelGetColor( $coord[0] + $x , $coord[1] + $y) ,6) = $ref_color Then
if Not $i < $asize1 Then
MouseMove ( $coord[0], $coord[1])
$i = 50000
$ybegin = 768
return $coord
EndIf
Else
$i = 50000
EndIf
$i = $i +1
WEnd
EndIf
$xbegin = 0
$i = 0
next
return 1
EndFunc
Alles anzeigen