2012-11-13 14 views
9

Javaプログラムでスクリーンイベントに反応したいので、実際の画面でイメージを探したいと思います。私は、ロボットクラスからScreenshotを取得してピクセルを検索する方法を書こうとしましたが、それは長くかかりました。JavaのImageSearchDll.dllを使用します。(AutoItから)edit:JNA

は私がのAutoItで、私はそれがJavaで動作して取得しようと、今かなり良い、この仕事をしていませんし、外部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のようなものを試してみましたが、私はそれが働いて得ることができません。私はAutoItXをJavaで動作させるためにAutoItXを試しましたが、インクルードでは動作しません。手伝って頂けますか?

編集:もう一度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 

修正できますか?

+0

呼び出ししようとしている関数の実際のプロトタイプ(できればC)がありますか?元の_ImageSearchArea関数の "ByRef"デコレータは、ImageSearchが 'int'ではなく' int * 'を期待しているようです。 JNAの対応する型は 'IntByReference'です。 – technomage

答えて

1

パスの代わりにRuntime.getRuntime().exec()を使用して、imagesearchを実行するアプリケーション(c、autoitスクリプトなど)を生成し、ファイルベース/ポーリング方法(または標準出力)を利用して、あなたの結果をあなたのJavaアプリケーションに手に入れてください。

関連する問題