मैं अपने जावा डेबूटस्ट्रैप में एक स्क्रीन घटना पर प्रतिक्रिया करने के लिए चाहते हैं तो मैं अपने वास्तविक स्क्रीन में एक छवि लगाना चाहते हैं। मैंने रोबोट वर्ग से स्क्रीनशॉट प्राप्त करने के लिए एक विधि लिखने की कोशिश की और फिर पिक्सल खोजें - लेकिन यह लंबे समय तक चल रहा था।उपयोग ImageSearchDll.dll जावा (AutoIt से) में संपादित करें: JNA
मैं जानता हूँ कि AutoIt में एक बाहरी DLL कि यह काम बहुत अच्छी है और अब मैं यह जावा में चल पाने के लिए करने की कोशिश की है कि वहाँ ... लेकिन मैं अटक कर रहा हूँ:/
.dll में कहा जाता है AutoIt इस तरह शामिल है:
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)
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
मैं dll हो गया और JNA तरह बातें करने की कोशिश की, लेकिन मैं यह काम नहीं कर प्राप्त कर सकते हैं। मैंने ऑटोआईटीएक्स को जावा में चल रहे ऑटोआईट फ़ंक्शंस को प्राप्त करने का भी प्रयास किया लेकिन यह शामिल के साथ काम नहीं करता है। क्या आप मेरी मदद कर सकते हैं?
संपादित करें: ठीक है मैंने किया एक और JNA पर कोशिश करते हैं और अब मैं एक स्ट्रिंग वापस मिल - लेकिन स्ट्रिंग त्रुटि का अर्थ है। समस्या क्या है? मैं एक इंटरफेस है:
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);
}
और मैं इसे इस तरह कहते हैं:
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");
मैं हमेशा मिलता है "0" वापस जहां या त्रुटि का मतलब नहीं मिला जैसा मैंने AutoIt फ़ाइल में देख सकते हैं:
; If error exit
if $result[0]="0" then return 0
तुम मुझे कि ठीक करने में सहायता कर सकते हैं?
आप समारोह आप कॉल करने के लिए प्रयास कर रहे हैं के लिए एक वास्तविक प्रोटोटाइप (अधिमानतः सी) है? अपने मूल _ImageSearchArea समारोह में "ByRef" सज्जाकार सूचित करते हैं कि चित्रखोज उम्मीद कर रही है 'पूर्णांक *' उन मापदंडों के लिए, नहीं 'int' प्रतीत होता है। जेएनए में इसी प्रकार का प्रकार 'IntByReference' है। – technomage