Nano Hash - криптовалюты, майнинг, программирование

Используйте ImageSearchDll.dll в Java (из AutoIt), отредактируйте: JNA

Я хочу реагировать на событие экрана в моей Java-программе, поэтому я хочу найти изображение на своем реальном экране. Я попытался написать метод для получения снимка экрана из класса робота, а затем поиска пикселей, но это заняло много времени.

Я знаю, что в AutoIt есть внешняя DLL, которая неплохо справляется с этой задачей, и теперь я попытался запустить ее в Java... Но я застрял:/

.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 для запуска функций AutoIt на Java, но он не работает с включениями. Можете вы помочь мне?

edit: Хорошо, я сделал еще одну попытку с 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

Вы можете помочь мне исправить это?

13.11.2012

  • У вас есть фактический прототип (желательно C) для функции, которую вы пытаетесь вызвать? Декораторы ByRef в исходной функции _ImageSearchArea, по-видимому, подразумевают, что ImageSearch ожидает int * для этих параметров, а не int. Соответствующий тип в JNA — IntByReference. 14.11.2012

Ответы:


1

Альтернативой пути, по которому вы идете, является использование Runtime.getRuntime().exec() для создания приложения (c, скрипт autoit и т. д.), которое выполняет поиск изображений и использует методологию на основе файлов/опроса (или через стандартный вывод) для связи между ними, чтобы получить ваши результаты. ваше Java-приложение.

27.05.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..