Jump to content

Recommended Posts

Posted

Hello Autoit! :bye:

Today i discovered that pixelgetcolor doesn't adapt to the DPI of the system, and i want to fix this somehow as my laptop uses 120 DPI.

This is what i have came up with so far:

AutoItSetOption ( "CaretCoordMode" , 0)
AutoItSetOption ( "MouseCoordMode" , 0)
AutoItSetOption ( "PixelCoordMode" , 0)
AutoItSetOption ( "GUICoordMode" , 0)
#include <MsgBoxConstants.au3>
#include <Misc.au3>
#include <WinAPIGdi.au3>

; enum _PROCESS_DPI_AWARENESS
Global Const $PROCESS_DPI_UNAWARE = 0
Global Const $PROCESS_SYSTEM_DPI_AWARE = 1
Global Const $PROCESS_PER_MONITOR_DPI_AWARE = 2

; enum _MONITOR_DPI_TYPE
Global Const $MDT_EFFECTIVE_DPI = 0
Global Const $MDT_ANGULAR_DPI = 1
Global Const $MDT_RAW_DPI = 2
Global Const $MDT_DEFAULT = $MDT_EFFECTIVE_DPI

HotKeySet('{ESC}','Terminate')
Func Terminate()
   Exit
EndFunc

$iPD = 1
while 1

$aPos = WinGetPos("[ACTIVE]")
ToolTip (PixelGetColor( MouseGetPos()[0]*(96/_DPI(0)), MouseGetPos()[1]*(96/_DPI(1))) & ', ' & MouseGetPos()[0] & ', ' & MouseGetPos()[1] )
if $iPD = 1 and Not _IsPressed(22) Then
   $iPD = 0
   Sleep(100)
EndIf
if $iPD = 0 And _IsPressed(22) Then ;Page down is pressed
   ClipPut( 'PixelGetColor($aPos[2]' & '*' & MouseGetPos(0)/$aPos[2] & ',' & '$aPos[3]' & '*' & MouseGetPos(1)/$aPos[3] & ')' & '=' & PixelGetColor( MouseGetPos()[0], MouseGetPos()[1]))
   $iPD = 1
EndIf
WEnd


;Functions


Func _DPI($iCordinate) ;0 for x and 1 for y
   _WinAPI_SetProcessDpiAwareness($PROCESS_SYSTEM_DPI_AWARE)
   $aMonitors = _WinAPI_EnumDisplayMonitors()
   $aDPI = _WinAPI_GetDpiForMonitor($aMonitors[1][0], $MDT_DEFAULT)
   Return $aDPI[$iCordinate]
EndFunc

Func _WinAPI_SetProcessDpiAwareness($DPIAware)
  DllCall("Shcore.dll", "long", "SetProcessDpiAwareness", "int", $DPIAware)
  If @error Then Return SetError(1, 0, 0)
EndFunc

Func _WinAPI_GetDpiForMonitor($hMonitor, $dpiType)
  Local $X, $Y
  $aRet = DllCall("Shcore.dll", "long", "GetDpiForMonitor", "long", $hMonitor, "int", $dpiType, "uint*", $X, "uint*", $Y)
  If @error Or Not IsArray($aRet) Then Return SetError(1, 0, 0)
  Local $aDPI[2] = [$aRet[3],$aRet[4]]
  Return $aDPI
EndFunc

 

I'm pretty sure it has to do with me using the DPI in the wrong way as i dont really understand it (even after searching around on the internet for like an hour)

It would really help if anyone could help me on the right track :P

Posted

I'm going to ask the obvious question - why do you have to do a pixel color search? Why can't you just hook into the control you need directly? The problem you are having is one of the many reasons why pixel searching is just plain bad coding.

Even better - what is the name of the application? Most likely we already have a solution coded for you and will save you loads of trouble. For example if you are working in a web interface use this: https://www.autoitscript.com/forum/topic/153520-iuiautomation-ms-framework-automate-chrome-ff-ie/

 

Posted

Thank you Bert from the muppets, but I am having a competition with my group of friends where we try to make the most efficient cookie clicker script. As far as i am concerned pixelgetcolor is the only command that would help me to win. :P

Posted

Did you try to check maginfication and recalculate coordinates ?

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

  • Developers
Posted
  On 9/20/2018 at 1:32 PM, Pricehacker said:

Thank you Bert from the muppets, but I am having a competition with my group of friends where we try to make the most efficient cookie clicker script. As far as i am concerned pixelgetcolor is the only command that would help me to win. :P

Expand  

funny .... and locked. You better read those forum rules before you post next!

Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

  • Jos locked this topic
Guest
This topic is now closed to further replies.
×
×
  • Create New...