Jump to content

1 Screenshot

About This File

ImageSearch UDF - AutoIt Wrapper for ImageSearchDLL

Overview

ImageSearchDLL_UDF.au3 is a high-level AutoIt wrapper for ImageSearchDLL, providing easy-to-use functions for image searching, mouse automation, and multi-monitor support. It handles all the complexity of DLL calls and provides a clean, reliable API with built-in error handling and fallback mechanisms.

  • Author: Dao Van Trong - TRONG.PRO
  • UDF Version: v3.3
  • Compatible with: ImageSearchDLL v3.3+
  • AutoIt Version: 3.3.16.1+
  • License: MIT License

Support My Work

Enjoy my work? Buy me a 🍻 or tip via ❤️ PayPal

Your support helps me continue developing and maintaining this library for the community! 🙏

Key Features

Search Functions

  • Screen Search: Find images on screen with multi-monitor support
  • Image-in-Image Search: Find images within other images
  • HBITMAP Search: Direct bitmap handle searching
  • Wait & Click: Wait for image and auto-click when found
  • Cache Control: Enable/disable persistent caching per search

Mouse Automation (v3.3 Enhanced)

  • Multi-Monitor Support: 100% reliable on all monitor configurations
  • Negative Coordinates: Full support via WinAPI SetCursorPos
  • Click Simulation: WinAPI mouse_event for all button types
  • Smooth Movement: Optional speed parameter for cursor animation
  • Window Clicks: Click relative to window positions

Monitor Management

  • Auto-Detection: Enumerate all connected monitors
  • Virtual Desktop: Coordinate conversion between monitor and virtual space
  • Specific Monitor Search: 2-3x faster when searching single monitor
  • Monitor Info: Get position, size, and primary status

Installation

  1. Include the UDF in your AutoIt script:
#include "ImageSearchDLL_UDF.au3"
  1. Place DLL in same directory as script:

    • ImageSearchDLL_x64.dll for x64 AutoIt
    • ImageSearchDLL_x86.dll for x86 AutoIt
    • Not required, as the DLL is already embedded in the UDF!
  2. Initialize (automatic on first use):

_ImageSearch_Startup()  ; Optional - auto-called if needed

Quick Start Examples

Example 1: Simple Image Search

#include "ImageSearchDLL_UDF.au3"

; Search for image on screen
Local $aResult = _ImageSearch("button.png")

If $aResult[0][0] > 0 Then
    ConsoleWrite("Found at: X=" & $aResult[1][0] & ", Y=" & $aResult[1][1] & @CRLF)
    ; Click the found image
    _ImageSearch_MouseClick("left", $aResult[1][0], $aResult[1][1])
Else
    ConsoleWrite("Image not found" & @CRLF)
EndIf

Example 2: Multi-Monitor Search

#include "ImageSearchDLL_UDF.au3"

; Search on all monitors (virtual desktop)
Local $aResult = _ImageSearch("icon.png", 0, 0, 0, 0, -1)

; OR search on specific monitor (faster!)
Local $aResult = _ImageSearch("icon.png", 0, 0, 0, 0, 2) ; Monitor 2

If $aResult[0][0] > 0 Then
    ConsoleWrite("Found " & $aResult[0][0] & " match(es)" & @CRLF)
    For $i = 1 To $aResult[0][0]
        ConsoleWrite("Match " & $i & ": X=" & $aResult[$i][0] & ", Y=" & $aResult[$i][1] & @CRLF)
    Next
EndIf

Example 3: Wait and Click

#include "ImageSearchDLL_UDF.au3"

; Wait up to 5 seconds for image, then click it
Local $iResult = _ImageSearch_WaitClick(5000, "submit.png", "left", 1)

If $iResult Then
    ConsoleWrite("Image found and clicked!" & @CRLF)
Else
    ConsoleWrite("Timeout - image not found" & @CRLF)
EndIf

Example 4: Find All Occurrences

#include "ImageSearchDLL_UDF.au3"

; Find all matches (up to 10)
Local $aResult = _ImageSearch("item.png", 0, 0, 0, 0, -1, 10, 10)

If $aResult[0][0] > 0 Then
    For $i = 1 To $aResult[0][0]
        ConsoleWrite("Match " & $i & ": ")
        ConsoleWrite("X=" & $aResult[$i][0] & ", Y=" & $aResult[$i][1])
        ConsoleWrite(", W=" & $aResult[$i][2] & ", H=" & $aResult[$i][3] & @CRLF)
    Next
EndIf

Example 5: Image-in-Image Search

#include "ImageSearchDLL_UDF.au3"

; Search for button.png within screenshot.png
Local $aResult = _ImageSearch_InImage("screenshot.png", "button.png", 15, 5)

If $aResult[0][0] > 0 Then
    ConsoleWrite("Found " & $aResult[0][0] & " match(es) in image" & @CRLF)
EndIf

Example 6: Region Search with Tolerance

#include "ImageSearchDLL_UDF.au3"

; Search in specific region with high tolerance
Local $aResult = _ImageSearch("target.png", 100, 100, 800, 600, -1, 20)

If $aResult[0][0] > 0 Then
    ConsoleWrite("Found at: " & $aResult[1][0] & ", " & $aResult[1][1] & @CRLF)
EndIf

Example 7: Cache-Enabled Search

#include "ImageSearchDLL_UDF.au3"

; Enable cache for 30-50% performance boost on repeated searches
Local $aResult = _ImageSearch("icon.png", 0, 0, 0, 0, -1, 10, 1, 1, 1.0, 1.0, 0.1, 0, 1)
;                                                                                       ↑
;                                                                               iUseCache=1

If $aResult[0][0] > 0 Then
    ConsoleWrite("Found (cached search): " & $aResult[1][0] & ", " & $aResult[1][1] & @CRLF)
EndIf

Example 8: Monitor Management

#include "ImageSearchDLL_UDF.au3"

; Get monitor information
_ImageSearch_Monitor_GetList()

ConsoleWrite("Total monitors: " & $g_aMonitorList[0][0] & @CRLF)

For $i = 1 To $g_aMonitorList[0][0]
    ConsoleWrite("Monitor " & $i & ": " & _
        $g_aMonitorList[$i][5] & "x" & $g_aMonitorList[$i][6] & _
        ($g_aMonitorList[$i][7] ? " (Primary)" : "") & @CRLF)
Next

; Convert coordinates between monitor and virtual desktop
Local $aVirtual = _ImageSearch_Monitor_ToVirtual(2, 100, 200)
ConsoleWrite("Monitor 2 (100,200) = Virtual (" & $aVirtual[0] & "," & $aVirtual[1] & ")" & @CRLF)

Core Functions Reference

Search Functions

_ImageSearch()

_ImageSearch($sImagePath, [$iLeft=0], [$iTop=0], [$iRight=0], [$iBottom=0], 
             [$iScreen=-1], [$iTolerance=10], [$iResults=1], [$iCenterPOS=1], 
             [$fMinScale=1.0], [$fMaxScale=1.0], [$fScaleStep=0.1], 
             [$iReturnDebug=0], [$iUseCache=0])

Parameters:

  • $sImagePath - Image file path (or multiple: "img1.png|img2.png")
  • $iLeft, $iTop, $iRight, $iBottom - Search region (0 = full screen)
  • $iScreen - Monitor: -1=all, 0=primary, 1=first, 2=second, etc.
  • $iTolerance - Color tolerance 0-255
  • $iResults - Max results to return (1-64)
  • $iCenterPOS - 1=return center, 0=return top-left
  • $fMinScale, $fMaxScale, $fScaleStep - Scaling parameters
  • $iReturnDebug - 1=enable debug output
  • $iUseCache - 1=enable cache, 0=disable

Returns:

  • Array[0][0] = match count
  • Array[1..n][0] = X coordinate
  • Array[1..n][1] = Y coordinate
  • Array[1..n][2] = Width
  • Array[1..n][3] = Height

_ImageSearch_InImage()

_ImageSearch_InImage($sSourceImage, $sTargetImage, [$iTolerance=10], 
                     [$iResults=1], [$iCenterPOS=1], [$fMinScale=1.0], 
                     [$fMaxScale=1.0], [$fScaleStep=0.1], [$iReturnDebug=0], 
                     [$iUseCache=0])

Search for target image(s) within a source image file.

_ImageSearch_Wait()

_ImageSearch_Wait($iTimeout, $sImagePath, [$iLeft=0], [$iTop=0], 
                  [$iRight=0], [$iBottom=0], [$iScreen=-1], [$iTolerance=10], 
                  [$iResults=1], [$iCenterPOS=1], [$fMinScale=1.0], 
                  [$fMaxScale=1.0], [$fScaleStep=0.1], [$iReturnDebug=0], 
                  [$iUseCache=0])

Wait for image to appear (with timeout in milliseconds).

_ImageSearch_WaitClick()

_ImageSearch_WaitClick($iTimeout, $sImagePath, [$sButton="left"], 
                       [$iClicks=1], [$iLeft=0], [$iTop=0], [$iRight=0], 
                       [$iBottom=0], [$iScreen=-1], [$iTolerance=10], 
                       [$iResults=1], [$iCenterPOS=1], [$fMinScale=1.0], 
                       [$fMaxScale=1.0], [$fScaleStep=0.1], [$iReturnDebug=0], 
                       [$iUseCache=0])

Wait for image and automatically click it when found.

Mouse Functions (v3.3 Enhanced)

_ImageSearch_MouseMove()

_ImageSearch_MouseMove($iX, $iY, [$iSpeed=0], [$iScreen=-1])

Move mouse cursor to coordinates. Supports negative coordinates for multi-monitor.

  • Uses WinAPI SetCursorPos for 100% reliability
  • $iSpeed - 0=instant, >0=smooth movement with steps

_ImageSearch_MouseClick()

_ImageSearch_MouseClick([$sButton="left"], [$iX=-1], [$iY=-1], 
                        [$iClicks=1], [$iSpeed=0], [$iScreen=-1])

Click mouse at coordinates. Supports negative coordinates for multi-monitor.

  • Uses WinAPI mouse_event for reliable clicking
  • $sButton - "left", "right", "middle"
  • $iX, $iY - Virtual desktop coordinates (-1 = current position)

_ImageSearch_MouseClickWin()

_ImageSearch_MouseClickWin($sTitle, $sText, $iX, $iY, 
                           [$sButton="left"], [$iClicks=1], [$iSpeed=0])

Click at window-relative coordinates.

Monitor Functions

_ImageSearch_Monitor_GetList()

_ImageSearch_Monitor_GetList()

Enumerate all monitors and populate $g_aMonitorList array.

Global Array Structure:

$g_aMonitorList[0][0] = Total monitor count
$g_aMonitorList[i][0] = Handle
$g_aMonitorList[i][1] = Left
$g_aMonitorList[i][2] = Top
$g_aMonitorList[i][3] = Right
$g_aMonitorList[i][4] = Bottom
$g_aMonitorList[i][5] = Width
$g_aMonitorList[i][6] = Height
$g_aMonitorList[i][7] = IsPrimary (1/0)
$g_aMonitorList[i][8] = Device name

_ImageSearch_Monitor_ToVirtual()

_ImageSearch_Monitor_ToVirtual($iMonitor, $iX, $iY)

Convert monitor-relative coordinates to virtual desktop coordinates.

_ImageSearch_Monitor_FromVirtual()

_ImageSearch_Monitor_FromVirtual($iMonitor, $iX, $iY)

Convert virtual desktop coordinates to monitor-relative coordinates.

Utility Functions

_ImageSearch_CaptureScreen()

_ImageSearch_CaptureScreen([$iLeft=0], [$iTop=0], [$iRight=0], 
                           [$iBottom=0], [$iScreen=-1])

Capture screen region as HBITMAP handle.

_ImageSearch_hBitmapLoad()

_ImageSearch_hBitmapLoad($sImageFile, [$iAlpha=0], [$iRed=0], 
                         [$iGreen=0], [$iBlue=0])

Load image file as HBITMAP with optional background color.

_ImageSearch_GetVersion()

_ImageSearch_GetVersion()

Get DLL version string.

_ImageSearch_GetSysInfo()

_ImageSearch_GetSysInfo()

Get system info (CPU, screen, cache stats).

_ImageSearch_ClearCache()

_ImageSearch_ClearCache()

Clear all DLL caches (location and bitmap).

Performance Tips

Cache System

  • Enable caching for repeated searches: $iUseCache=1
  • 30-50% faster on subsequent searches
  • Persistent across script runs
  • Auto-validated (removes stale entries)

Multi-Monitor Optimization

  • Use specific monitor ($iScreen=1 or 2) for 2-3x faster search
  • Use virtual desktop ($iScreen=-1) only when needed
  • Coordinates are always in virtual desktop space (may be negative)

Search Optimization

  • Smaller region = faster search
  • Higher tolerance = faster but less accurate
  • Fewer results ($iResults=1) = faster
  • Disable debug in production ($iReturnDebug=0)

Version 3.3 Improvements

Fixed Issues

 Multi-Monitor Mouse Movement - Now 100% reliable using WinAPI  Negative Coordinates - Full support for monitors positioned left/above primary  Mouse Click Reliability - WinAPI mouse_event never fails  Coordinate Conversion - Proper handling of virtual desktop space

Enhanced Features

  • Debug logging shows actual mouse position after move
  • Better error handling with meaningful error codes
  • All mouse functions bypass DLL for maximum reliability
  • Smooth cursor movement with customizable speed

Breaking Changes

  • Mouse functions no longer rely on DLL implementation
  • Always use WinAPI for mouse operations (more reliable)

Troubleshooting

"DLL not found" Error

  • Ensure DLL is in same directory as script
  • Use correct architecture (x64 vs x86)
  • Check with FileExists($g_sImgSearchDLL_Path)

Mouse Not Moving on Second Monitor

  • Fixed in v3.3! Now uses WinAPI SetCursorPos
  • Coordinates are virtual desktop (may be negative)
  • Update to UDF v3.3 or later

Image Not Found

  • Check image file exists
  • Increase tolerance ($iTolerance=20)
  • Enable debug ($iReturnDebug=1) to see search info
  • Try different region/monitor settings

Slow Search Performance

  • Enable cache ($iUseCache=1)
  • Use specific monitor instead of all monitors
  • Reduce search region
  • Lower max results

Example: Complete Script

#include "ImageSearchDLL_UDF.au3"

; Initialize
_ImageSearch_Startup()

; Show system info
ConsoleWrite("UDF: " & $IMGS_UDF_VERSION & @CRLF)
ConsoleWrite("DLL: " & _ImageSearch_GetVersion() & @CRLF)
ConsoleWrite(_ImageSearch_GetSysInfo() & @CRLF)

; Search for image with cache enabled
Local $aResult = _ImageSearch("target.png", 0, 0, 0, 0, -1, 10, 5, 1, 1.0, 1.0, 0.1, 1, 1)

If $aResult[0][0] > 0 Then
    ConsoleWrite("Found " & $aResult[0][0] & " match(es):" & @CRLF)
    
    For $i = 1 To $aResult[0][0]
        ConsoleWrite("  Match " & $i & ": ")
        ConsoleWrite("X=" & $aResult[$i][0] & ", Y=" & $aResult[$i][1])
        ConsoleWrite(", W=" & $aResult[$i][2] & ", H=" & $aResult[$i][3] & @CRLF)
        
        ; Move mouse and click
        _ImageSearch_MouseMove($aResult[$i][0], $aResult[$i][1], 10)
        Sleep(500)
        _ImageSearch_MouseClick("left", $aResult[$i][0], $aResult[$i][1])
        Sleep(1000)
    Next
Else
    ConsoleWrite("No matches found" & @CRLF)
EndIf

; Cleanup
_ImageSearch_Shutdown()

License & Contact

  • Author: Dao Van Trong
  • Website: TRONG.PRO
  • Email: trong@email.com
  • License: MIT License
  • AutoIt Forum: Post in AutoIt General Help

See Also

  • README.md - DLL API reference and C++ examples
  • ImageSearchDLL_TestSuite.au3 - Interactive GUI test application

Thank you for using ImageSearch UDF! 🚀

Edited by Trong
Update document!


What's New in Version v3.3.3

Released

Split UDF file: versions with embedded DLLs in UDFs! and without embedded DLLs in UDFs

If you choose the [MD] version, it requires the Visual C++ Redistributable x86/x64 to be installed!
If you choose the [MT] version, it does NOT require the Visual C++ Redistributable x86/x64 to be installed!

The ImageSearchDLL_UDF_MT_ALL.au3 version has fully embedded all the [MT] DLLs, making the file size the largest.

The ImageSearchDLL_UDF_MD_ALL.au3 version has fully embedded all the [MD] DLLs, making it lighter than the [MT] version.

The ImageSearchDLL_UDF_MT_x64.au3 version only embeds the [MT] x64 DLL, making it lighter than the version with all the other DLLs embedded.

The ImageSearchDLL_UDF.au3 version is the version that does not have the DLLs embedded in the UDF 
(You need to specify the DLL path or manually copy the DLLs to the program folder).

 


User Feedback

You may only provide a review once you have downloaded the file.


Y3llo

   6 of 6 members found this review helpful 6 / 6 members

It works perfectly, thanks a lot !

×
×
  • Create New...