I did my memory hacking using THIS thread as a guide.
To Use:
1) Open Minesweeper (XP Only)
2) Run Script
3) Have Fun!
If You do not have XP, then take a look HERE for an XP Minesweeper download:
It gives me an average of 856 milliseconds per game from a sample of 200
EDIT: I tried it again, and now it gives me 290 ms
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. SendMode Input ; Recommended for new scripts due to its superior speed and reliability. SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. SetBatchLines, -1 WinGet, PID, PID, Minesweeper Memory("Open", PID) Return RButton:: WinGetPos,,, W2,, Minesweeper W2 /= 2 m := Memory("Read", 0x01005330) w := Memory("Read", 0x01005334) h := Memory("Read", 0x01005338) StartTime := A_TickCount Click %W2% 74 Sleep 30 loop %h% { y := A_Index loop %w% { x := A_Index x2 := x * 16 y2 := 85 + y * 16 v := Memory("Read", (0x1005340 + (32 * y) + x), 1) If v = 0x8f Click, %x2%, %y2%, Right Else Click, %x2%, %y2%, Left } } ElapsedTime := A_TickCount - StartTime MsgBox, %ElapsedTime% Return ESC:: Memory("Close") ExitApp Return Memory(Type="Close",Param1=0,Param2=0,Param3=0) { Static ProcessHandle If Type = Open ; Open a new handle. Syntax: Memory(1, PID) ProcessHandle := DllCall("OpenProcess","Int",2035711,"Int", 0,"UInt",Param1) Else If Type = Close ; Close the handle. Syntax: Memory(2) DllCall("CloseHandle","UInt",ProcessHandle) Else If Type = Read ; Reading a value. Syntax: Memory(3, Address [, Length]) { Param2 := ((!Param2) ? 4 : Param2) ; If length is left out it defaults to 4 VarSetCapacity(MVALUE,Param2,0) If (ProcessHandle) && DllCall("ReadProcessMemory","UInt" ,ProcessHandle,"UInt",Param1,"Str",MVALUE,"UInt",Param2,"UInt",0) { Loop %Param2% Result += *(&MVALUE + A_Index-1) << 8*(A_Index-1) Return Result } Return !ProcessHandle ? "Handle Closed: " Closed : "Fail" } Else If Type = Write ; Writing a Value. Syntax: Memory(4, Address, Value [, Length]) { Param3 := ((!Param3) ? 4 : Param3) ; If length is left out it defaults to 4 If (ProcessHandle) && DllCall("WriteProcessMemory","UInt" ,ProcessHandle,"UInt",Param1,"Uint*",Param2,"Uint",Param3,"Uint",0) Return "Success" Return !ProcessHandle ? "Handle Closed: " closed : "Fail" } Else If Type = Point ; Pointing. Syntax: Memory(5, Pointer, Offset) { Param1 := Memory("Read", Param1) If Param1 is not xdigit Return Param1 Return Param1 + Param2 } }