Chcę reagować na zdarzenie na ekranie w moim programie Java, więc chcę znaleźć obraz na moim rzeczywistym ekranie. Próbowałem napisać metodę, aby uzyskać zrzut ekranu z klasy robotów, a następnie przeszukać piksele - ale trwało to zbyt długo.Użyj ImageSearchDll.dll w Java (z AutoIt) edit: JNA
Wiem, że w AutoIt jest zewnętrzny DLL, że robi to zadanie bardzo dobrze i teraz starałem się, że działa w Java ... Ale siedzę:/
.dll nazywa się w AutoIt Zawiera tak:
Func _ImageSearch($findImage,$resultPosition,ByRef $x, ByRef $y,$tolerance)
return _ImageSearchArea($findImage,$resultPosition,0,0,@DesktopWidth,@DesktopHeight,$x,$y,$tolerance)
EndFunc
i:
Func _ImageSearchArea($findImage,$resultPosition,$x1,$y1,$right,$bottom,ByRef $x, ByRef $y, $tolerance)
if $tolerance>0 then $findImage = "*" & $tolerance & " " & $findImage
$result = DllCall("ImageSearchDLL.dll","str","ImageSearch","int",$x1,"int",$y1,"int",$right,"int",$bottom,"str",$findImage)
if $result[0]="0" then return 0
$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
mam dll i próbował rzeczy jak JNA, ale nie mogę dostać pracy. Próbowałem także AutoItX, aby uzyskać funkcje AutoIt działające w Javie, ale nie działa z włączeniami. Możesz mi pomóc?
edytuj: OK, zrobiłem kolejną próbę na JNA, a teraz otrzymuję String - ale ciąg oznacza błąd. Jaki jest problem? Mam Interface
public interface ImageSearchDLL extends Library{
ImageSearchDLL INSTANCE = (ImageSearchDLL) Native.loadLibrary("ImageSearchDLL", ImageSearchDLL.class);
String ImageSearch(int x1, int y1, int x2, int y2, String findImage);
}
i nazywam to tak:
static {
File file = new File("libs", "ImageSearchDLL.dll");
System.load(file.getAbsolutePath());
}
(...)
String a = ImageSearchDLL.INSTANCE.ImageSearch(0, 0, 500, 500, "C:\myProg\OK.bmp");
ja zawsze "0" z powrotem, gdzie oznacza błąd lub nie znaleziono jak widzę w pliku Auto:
; If error exit
if $result[0]="0" then return 0
Czy możesz mi pomóc to rozwiązać?
Czy masz rzeczywisty prototyp (najlepiej C) dla funkcji, do której chcesz zadzwonić? Dekoratory "ByRef" w oryginalnej funkcji _ImageSearchArea mogą sugerować, że ImageSearch oczekuje "int *" dla tych parametrów, a nie "int". Odpowiedni typ w JNA to 'IntByReference'. – technomage