![]() |
Bildschirm nach bestimmten Bitmap absuchen
hi,
ich suche eine Funktion, die den Desktop nach einem bestimmten Bitmap absucht und die Koordinaten zurück gibt, wo es gefunden wurde habe bis jetzt leider nur Möglichkeiten für AutoIt gefunden, nun brauche ich eine für Delphi. Danke schon einmal für eure hilfe, gruß, fredyy |
Re: Desktop nach bestimmten Bitmap absuchen
HI,
1.) wie sieht die Möglichkeit für AutoIT aus? Vllt. kann man die ja umschreiben. 2.) 2 Schleifen und dann den Desktop systematisch absuchen. Bernhard |
Re: Desktop nach bestimmten Bitmap absuchen
Liste der Anhänge anzeigen (Anzahl: 1)
Das ist die Funktion + Beschreibung und dazu wird noch eine DLL benötigt, hängt im Anhang.
Danke, Fredyy
Code:
;===============================================================================
; ; 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 ; ;=============================================================================== Func _ImageSearch($findImage,$resultPosition,ByRef $x, ByRef $y,$tolerance) return _ImageSearchArea($findImage,$resultPosition,0,0,@DesktopWidth,@DesktopHeight,$x,$y,$tolerance) EndFunc 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 |
Re: Desktop nach bestimmten Bitmap absuchen
Je nachdem, was genau in der Registry steht (evtl. der Dateiname), kannst du dir dieses Thema näher ansehen und auch Luckies Links zu seinem Tool:
![]() Ob du die Koordinaten in Pixeln bekommst oder nur eine fortlaufende Nummer, die du dann umrechnen musst, kann ich dir nicht sagen. |
Re: Desktop nach bestimmten Bitmap absuchen
Zitat:
zwischenstand: Suche gerade eine Möglichkeit die DLL aufzurufen, wie hier via DllCall und verstehe die Sektion mit der tolerance noch nicht wirklich.. |
Re: Bildschirm nach bestimmten Bitmap absuchen
Liste der Anhänge anzeigen (Anzahl: 1)
habe mir jetzt ne menge zum implementieren und bekomme es irgendwie nicht hin, leigt es evtl dran, dass die dll in c++ geschrieben ist?
also im source dll ist die funktion die ich brauche mit
Code:
definiert und genau die funktion brauche ich so in delphi, am besten ohne die riesige dll von Hand zu konvertieren :D
ImageSearch(int aLeft, int aTop, int aRight, int aBottom, char *aImageFile)
Habe nochmal den Source der DLL angehängt, evtl hilfts weiter. danke an alle die hier mal lesen und überlegen. gruß, fredyy |
Re: Bildschirm nach bestimmten Bitmap absuchen
also, wenn du die DLL benutzen willst, brauchst du sie nicht zu konvertieren. Eine DLL ist kompilierter Quelltext, der immer und jederzeit ausführbar ist, egal, wer/was die DLL aufruft.
je nach Delphi-Version sieht die Einbindung einer DLL anders aus. Guck doch mal in der Hilfe. Für D7 würde das dann heißen:
Delphi-Quellcode:
wobei ich mir beim Ergebnis nicht so sicher bin.
function ImageSearch(aLeft: Integer; aTop: Integer; aRight: Integer; aBottom: Integer; aImageFile: PChar): PChar; stdcall; external 'Datname.dll';
Bernhard |
Re: Bildschirm nach bestimmten Bitmap absuchen
Super, dass scheint schonmal zu funktionieren, jedoch funktioniert die Rückgabe der Koordianten x und y noch nicht richtig, habe die Variablen Global definiert, jedoch bleiben sie leer.
Hier meine erweiterte Funktion:
Delphi-Quellcode:
Danke schon einmal für die Super Hilfe.
function _ImageSearch(findImage: string; tolerance: Integer): Boolean;
var ergebnis : PChar; begin if (tolerance > 0) then findImage := '*' + inttostr(tolerance) + ' ' + findImage; ergebnis := ImageSearch(0,0,Screen.Width,Screen.Height,PCHAR(findImage)); if ergebnis[0] = '1' then begin showmessage('found' + inttostr(x) + ' ' + inttostr(y)); result := true; end else begin result := false end; end; gruß, Fredyy |
Re: Bildschirm nach bestimmten Bitmap absuchen
Gebe diese besser in Var/Out Parametern zurück
|
Re: Bildschirm nach bestimmten Bitmap absuchen
Kannst du mir zufällig ein kleines Beispiel geben, weil so wie ich es bis jetzt gesehen habe muss ich das in die Funktionsdeklaration aus der DLL eingefügt werden, doch wie geht das genau?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz