Einzelnen Beitrag anzeigen

Benutzerbild von Fredyy
Fredyy

Registriert seit: 1. Apr 2005
Ort: Wilhelmshaven
46 Beiträge
 
Delphi 7 Personal
 
#3

AW: Thread für einen Funktionsaufruf erstellen

  Alt 19. Sep 2012, 23:01
Die im Code aufgerufene Funktion ImageSearch() kommt aus der "ImageSearchDLL.dll", die im Anhang ist.
function ImageSearch(aLeft: Integer; aTop: Integer; aRight: Integer; aBottom: Integer; aImageFile: PChar): PChar; stdcall; external 'ImageSearchDLL.dll';

Daher denke ich, dass TCanvas hier kein Problem sein dürfte. Die Mausbewegung könnte ja auch außerhalb des Thread ausgeführt werden, sobald der Thread durch gelaufen ist.

Hier habe ich nochmal mit "Pseudo"-Code markiert, wie ich mir erhoffe, dass es funktioniert.
Delphi-Quellcode:
function _ImageSearch(findImage: string; tolerance: Integer; delay: Integer): Boolean;
var
  ergebnis : PChar;
  ergebnis2 : TStringList;
  oldPos : TPoint;
begin

  if (tolerance > 0) then findImage := '*' + inttostr(tolerance) + ' ' + findImage;

  [THREADSTART]
  ergebnis := ImageSearch(0,0,Screen.Width ,Screen.Height ,PCHAR(findImage));
  [THREADENDE]

  [WENN THREAD DURCHGELAUFEN ANFANG]
  if (ergebnis[0] = '1') then
  begin
    ergebnis2 := split(ergebnis, '|', true);
    sleep(delay);
    x := StrToInt(ergebnis2[1]) + round(StrToInt(ergebnis2[3])/2);
    y := StrToInt(ergebnis2[2]) + round(StrToInt(ergebnis2[4])/2);

    oldPos := mouse.CursorPos;

    mouse.CursorPos := point(x+Zufallszahl(-5,5),y+Zufallszahl(-5,5));
    mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
    mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

    mouse.CursorPos := oldPos;

    //showmessage('found' + inttostr(x) + ' ' + inttostr(y));
    result := true
  end
  else
  begin
    result := false
  end;
  [WENN THREAD DURCHGELAUFEN ENDE]

end;
Angehängte Dateien
Dateityp: rar ImageSearchDLL.rar (37,0 KB, 13x aufgerufen)
Frederick B.
  Mit Zitat antworten Zitat