Jump to content

Search Pixel Color From Memory Image


Greenseed
 Share

Recommended Posts

Hi everyone... long time i had not done a Autoit script :D

I was just lazy today.. and looking one of my friend playing Guitar Hero III.... im so bad at that game mouhaha! :P

So i started a Bot with PixelGetColor feature, but was not working, since each time i call that function, Autoit Take a complete screenShot from the GDI and search the pixel from there...

There is 5 Button, so that mean 5 ScreenShot... not good at all...

Then i managed to get 1 ScreenShot and after that reading pixel Color for my 5 region and then Send the right Key Press...

The bot is not perfect into that version... ;) since the goal here is to show off a script that can maybe be helpfull for other serious need :P i saw many ppl searching how to grab pixel color from memory ;)

#region opt and variable

Opt("SendKeyDelay", 0)          ;5 milliseconds
Opt("SendKeyDownDelay", 15)      ;1 millisecond
Opt("SendAttachMode",1)
Opt("TrayIconDebug", 0)         ;0=no info, 1=debug line info
Opt("TrayIconHide", 1)          ;0=show, 1=hide tray icon
Opt("WinDetectHiddenText", 0)   ;0=don't detect, 1=do detect

#include <GDIPlus.au3>
#include <ScreenCapture.au3>
#include <Color.au3>

ProcessSetPriority ( @AutoItPID, 4)

Global $MemoryContext

$Stop = false

HotKeySet("{END}", "end")
Hotkeyset("{INSERT}", "start")

while 1
    sleep(7)
wend

Func stop()
    $Stop = true
    Hotkeyset("{INSERT}", "start")
    
    DllCall("gdi32.dll", "int", "DeleteDC", "hwnd", $MemoryContext)
    _GDIPlus_ShutDown ()

    send("{z up}")
    send("{x up}")
    send("{c up}")
    send("{v up}")
    send("{b up}")  
EndFunc

Func end()
    DllCall("gdi32.dll", "int", "DeleteDC", "hwnd", $MemoryContext)
    _GDIPlus_ShutDown ()

    send("{z up}")
    send("{x up}")
    send("{c up}")
    send("{v up}")
    send("{b up}")  

    Exit
EndFunc

; Guitar Hero III: Legends of Rock
Func start()
        Hotkeyset("{INSERT}", "stop")
        _GDIPlus_Startup ()
        dim $down[5]
        local $detected
        $detected = false

        $MemoryContext = DllCall("gdi32.dll", "int", "CreateCompatibleDC", "int", 0)
        $MemoryContext = $MemoryContext[0]
        
        while not $Stop
            $HBITMAP = _ScreenCapture_Capture("", 200, 480, 600, 520,false)
            DllCall("gdi32.dll", "hwnd", "SelectObject", "int", $MemoryContext, "hwnd", $HBITMAP)

            ;Orange
            $Color = DLLCall("gdi32.dll","int","GetPixel","int",$MemoryContext,"int",65,"int",33)
            if BitAND($Color[0],0xFF0000) > 655360 then
                if not $down[0] then
                    send("{b down}")
                    $down[0] = true
                    $detected = true
                EndIf
            ElseIf $down[0] Then
                send("{b up}")
                $down[0] = false
            EndIf

            ;Blue
            $Color = DLLCall("gdi32.dll","int","GetPixel","int",$MemoryContext,"int",132,"int",33)
            if BitAND($Color[0],0xFF0000) > 655360 then
                if not $down[1] then
                    $detected = true
                    $down[1] = true
                    send("{v down}")
                EndIf
            ElseIf $down[1] Then
                send("{v up}")
                $down[1] = false
            EndIf
            
            ;Yellow
            $Color = DLLCall("gdi32.dll","int","GetPixel","int",$MemoryContext,"int",200,"int",34)
            if BitAND($Color[0],0xFF0000) > 655360 then
                if not $down[2] then
                    $down[2] = true
                    send("{c down}")
                    $detected = true
                EndIf
            ElseIf $down[2] Then
                send("{c up}")
                $down[2] = false
            EndIf
            
            ;Red
            $Color = DLLCall("gdi32.dll","int","GetPixel","int",$MemoryContext,"int",269,"int",33)
            if BitAND($Color[0],0xFF0000) > 655360 then
                if not $down[3] then
                    $down[3] = true
                    send("{x down}")
                    $detected = true
                EndIf
            ElseIf $down[3] Then
                send("{x up}")
                $down[3] = false
            EndIf           
            
            ;Green
            $Color = DLLCall("gdi32.dll","int","GetPixel","int",$MemoryContext,"int",336,"int",33)
            if BitAND($Color[0],0xFF0000) > 655360 then
                if not $down[4] then
                    $down[4] = true
                    send("{z down}")
                    $detected = true
                EndIf
            ElseIf $down[4] Then
                send("{z up}")
                $down[4] = false
            EndIf

            if $detected then
                send("n")
                $detected = false
                sleep(80)
            EndIf
            _WinAPI_DeleteObject($HBITMAP)
            sleep(7)
        wend
        $Stop = false
endfunc

GreenseedMCSE+I, CCNA, A+Canada, QuebecMake Love Around You.

Link to comment
Share on other sites

Cool stuff.I was just planning on makin a GH3 bot last night. xD I'm getting tired of attempting to beat Through The Fire and Flames. (Can't get past the red blue oarnge repeated sweep at the end, my pinkie's just not strong enough! :cry:)

[center][/center]Working on the next big thing.Currently Playing: Halo 4, League of LegendsXBL GT: iRememberYhslaw

Link to comment
Share on other sites

  • 3 months later...
  • 5 months later...
  • 1 year later...
  • 2 years later...
  • Developers

Could you please stop resurrecting old threads just because you are happy you could use them?

Thanks

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.
  :)

Link to comment
Share on other sites

Could you please stop resurrecting old threads just because you are happy you could use them?

Thanks

Jos

I think this policy of not resuscitating old post very strange, see:

The date of this topic is: Posted 25 January 2008 - 11:27 PM

@Manadar created this: in: Posted 31 January 2008 - 12:03 PM

And nobody complained about resurrect it!

I would be very happy if someone answered anything in my thread that was quite old, sure I would reply and update content!

Edit: If we can not resurrect old threads, it makes no sense to store them in the database.

Just an opinion,

JS

Edited by JScript

http://forum.autoitbrasil.com/ (AutoIt v3 Brazil!!!)

Somewhere Out ThereJames Ingram

somewh10.png

dropbo10.pngDownload Dropbox - Simplify your life!
Your virtual HD wherever you go, anywhere!

Link to comment
Share on other sites

  • Developers

I have no issue when the post is relevant but there is no relevancy and not contribution to the thread here.

Other than that we will not discuss nor negotiate anything around our forums rules. They have evolved over the past years into what they are now.

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.
  :)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...