imagesearcharea

07/27/2014 23:31 derrod#1
Hey Leute, hab leider weder im Internet noch in der Datei imagesearch.au3 was zu Parameterliste von _imagesearcharea gefunden, daher nun meine Frage:

Fall 1:
Code:
#include <ImageSearch.au3> 

$aFenster = WinGetPos ("Windows Media Player")
Local $result_x, $result_y

If _ImageSearchArea(@ScriptDir & "/Data/2.bmp", 0, $aFenster[0], $aFenster[1], $aFenster[0]+$aFenster[2], $aFenster[1]+$aFenster[3], $result_x, $result_y, 50) == 1 Then
   MsgBox("", "Erfolg", "Erfolg")
EndIf
Fall 2:
Code:
#include <ImageSearch.au3> 

$aFenster = WinGetPos ("Windows Media Player")
Local $result_x, $result_y

If _ImageSearchArea(@ScriptDir & "/Data/2.bmp", 0, $aFenster[0], $aFenster[1], $aFenster[2], $aFenster[3], $result_x, $result_y, 30) == 1 Then
   MsgBox("", "Erfolg", "Erfolg")
EndIf
Mit welchem durchsuche ich nur das Fenster (Win Media Player)?
Gruß derrod

EDIT: Fall 1 ist richtig, der 5. und 6. Parameter sind die Koordinaten des Punkts rechts unten!!! der Grund dafür, dass beides nicht funktioniert, ist jener, dass WinGetPos bei Windows Media Player leider falsche Werte zurückgibt (keine Ahnung wieso).
07/27/2014 23:33 MrDami123#2
Wieso öffnest du nicht einfach das Script und schaust nach?
07/27/2014 23:39 derrod#3
nun das hab ich, leider funzt beides nicht :( daher die Frage welchen Ansatz ich verfolgen soll!

Das komische ist, dass _imageSearch (also über den ganzen Bildschirm) funktioniert...
07/27/2014 23:42 MrDami123#4
Quote:
Originally Posted by derrod View Post
hab leider weder im Internet noch in der Datei imagesearch.au3 was zu Parameterliste von _imagesearcharea gefunden
Code:
Func _ImageSearchArea($findImage,$resultPosition,$x1,$y1,$right,$bottom,ByRef $x, ByRef $y, $tolerance)
    ;MsgBox(0,"asd","" & $x1 & " " & $y1 & " " & $right & " " & $bottom)
    if $tolerance>0 then $findImage = "*" & $tolerance & " " & $findImage
    $result = DllCall("ImageSearchDLL.dll","str","ImageSearch","int",$x1,"int",$y1,"int",$right,"int",$bottom,"str",$findImage)

    ; If error exit
    if $result[0]="0" then return 0
    
    ; Otherwise get the x,y location of the match and the size of the image to
    ; compute the centre of search
    $array = StringSplit($result[0],"|")
   
   $x=Int(Number($array[2]))
   $y=Int(Number($array[3]))
   if $resultPosition=1 then
      $x=$x + Int(Number($array[4])/2)
      $y=$y + Int(Number($array[5])/2)
   endif
   return 1
EndFunc
Quelle: [Only registered and activated users can see links. Click Here To Register...]

Zusatz:
Quote:
;================================================= ==============================
;
; Description: Find the position of an image on the desktop
; Syntax: _ImageSearchArea, _ImageSearch
; Parameter(s):
; $findImage - the image to locate on the desktop
; $tolerance - 0 for no tolerance (0-255). Needed when colors of
; image differ from desktop. e.g GIF
; $resultPosition - Set where the returned x,y location of the image is.
; 1 for centre of image, 0 for top left of image
; $x $y - Return the x and y location of the image
;
; Return Value(s): On Success - Returns 1
; On Failure - Returns 0
;
; Note: Use _ImageSearch to search the entire desktop, _ImageSearchArea to specify
; a desktop region to search
;
;================================================= ==============================
07/27/2014 23:50 derrod#5
danke meister, aber da war ich auch schon! leider wird keine Aussage über die parameter von _imagesearcharea gemacht sondern nur über _imagsearch!

und $right und $bottom kann beides bedeuten!
07/28/2014 00:02 MrDami123#6
Da steht doch das die Syntax für beide ist. Abgesehen davon verwendet _ImageSearch _ImageSearchArea mit eigenen Parametern, aus denen man die Bedeutung, zumindest von diesen, auch ableiten kann.

Code:
; Syntax:           _ImageSearchArea, _ImageSearch
; Parameter(s):     
;                   $findImage - the image to locate on the desktop
;                   $tolerance - 0 for no tolerance (0-255). Needed when colors of 
;                                image differ from desktop. e.g GIF
;                   $resultPosition - Set where the returned x,y location of the image is.
;                                     1 for centre of image, 0 for top left of image
;                   $x $y - Return the x and y location of the image
;
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0
Code:
Func _ImageSearch($findImage,$resultPosition,ByRef $x, ByRef $y,$tolerance)
   return _ImageSearchArea($findImage,$resultPosition,0,0,@DesktopWidth,@DesktopHeight,$x,$y,$tolerance)
EndFunc
Code:
Func _ImageSearchArea($findImage,$resultPosition,$x1,$y1,$right,$bottom,ByRef $x, ByRef $y, $tolerance)
Somit steht $x1,$y1 für die Startposition. $right,$bottom für die Desktop Auslösung. Der Rest steht oben in der Beschreibung.

Da ich kein AutoIT kann und es auch nicht drauf hab zum testen, musst du wohl den Code einfach anpassen.
07/28/2014 00:05 derrod#7
Quote:
Originally Posted by MrDami123 View Post
Somit steht $x1,$y1 für die Startposition. $right,$bottom für die Desktop Auslösung. Der Rest steht oben in der Beschreibung.
Nein, $right und $bottom steht nicht für die Auflösung, sondern entweder für den unteren Eckpunkt oder die Breite und Höhe des Kastens in dem gesucht werden soll... und das ist meine Frage: Punkt oder Breite/Höhe
07/28/2014 01:09 MrDami123#8
Wenn _ImageSearch es als ,@DesktopWidth,@DesktopHeight verwendet, steht es wohl für die Bildbreite und Höhe.

Etwas lesen und mitdenken kannst du doch auch.
07/28/2014 09:02 derrod#9
welche koordinaten hat denn die rechte untere Ecke des Bildschirms? Antwort: (desktopbreite; desktophöhe)
also kann es beides sein, die breite und höhe des kastens oder die koordinaten der rechten unteren ecke!

sorry, aber vielleicht wärs sinvoll wenn du dir nochmal genau meine Frage durchliest, weil du mir jetzt schon zum dritten mal Informationen lieferst, die ich schon kannte und die die Antwort offen lassen!
07/28/2014 17:20 flumio#10
Speicher dir doch einfach per wingetpos die koords vom benötigten fenster und benütze diese um das area für ImageSearchArea zu erhalten. Dann ist es nämlich auch egal wo und wie groß das Fenster bei irgendwem ist.
07/28/2014 21:23 derrod#11
aber genau das tue ich doch im codeausschnitt! liest sich hier überhaupt jemand die frage durch? :o
07/29/2014 05:36 flumio#12
Hmm tut mir leid hab bisher die Beiträge nur überflogen.
Keiner der beiden Codes kann funktionieren.

Quote:
;================================================= ==============================
;
; Description: Find the position of an image on the desktop
; Syntax: _ImageSearchArea, _ImageSearch
; Parameter(s):
; $findImage - the image to locate on the desktop
; $tolerance - 0 for no tolerance (0-255). Needed when colors of
; image differ from desktop. e.g GIF
; $resultPosition - Set where the returned x,y location of the image is.
; 1 for centre of image, 0 for top left of image
; $x $y - Return the x and y location of the image
;
; Return Value(s): On Success - Returns 1
; On Failure - Returns 0
;
; Note: Use _ImageSearch to search the entire desktop, _ImageSearchArea to specify
; a desktop region to search
;
;================================================= ==============================
_ImageSearchArea($findImage,$resultPosition,$x1,$y 1,$right,$bottom,ByRef $x, ByRef $y, $tolerance)

Dein Fehler ist hier:
Quote:
_ImageSearchArea(@ScriptDir & "/Data/2.bmp", 0, $aFenster[0], $aFenster[1], $aFenster[2], $aFenster[3], $result_x, $result_y, 30) == 1 Then
So nun weist du wo dein Fehler ist und hast auch die Hilfe den zu beheben. Jede andere Hilfe wäre nur Copy/Paste und hätte kein Lerneffekt.
07/29/2014 06:41 derrod#13
danke, ich will aber garkeinen code, sondern nur die einfache info, wofür die parameter $right und $bottom stehen, ob für die breite und höhe des kastens oder für die koordinaten der unteren rechten ecke!
07/29/2014 13:00 flumio#14
Stell dir vor du erstellst einen Bereich (Rechteck) mit 2 Punkten, der erste Punkt ist oben Links - x1, y1 und der zweite Punkt unten rechts - right, bottom

Steht aber auch in der ImageSearch.au3 bei den Infos.
07/29/2014 13:54 derrod#15
Aha, also der Punkt, VIELEN DANK :D
aber wieso geht dann der erste Fall nicht? da nehm ich doch den punkt:

Quote:
Originally Posted by derrod View Post
Fall 1:
Code:
#include <ImageSearch.au3> 

$aFenster = WinGetPos ("Windows Media Player")
Local $result_x, $result_y

If _ImageSearchArea(@ScriptDir & "/Data/2.bmp", 0, $aFenster[0], $aFenster[1], $aFenster[0]+$aFenster[2], $aFenster[1]+$aFenster[3], $result_x, $result_y, 50) == 1 Then
   MsgBox("", "Erfolg", "Erfolg")
EndIf