Решил все таки открыть для себя, что такое DllCall и как ей пользоваться. Начать решил с чтения памяти в процессе, поэтому попробовал разобраться в некоторых темах с кодом по чтению памяти:
http://forum.script-coding.com/viewtopic.php?id=8735
http://forum.script-coding.com/viewtopic.php?id=9705
http://forum.script-coding.com/viewtopic.php?id=7735
Надо сказать, что больше половины кодов в этих ссылках мне не понятны. Нашел оптимальную для начала изучения тему:
http://forum.script-coding.com/viewtopic.php?id=8241
На основе кода, написанным creature.ws решил понять как читать память нужного мне процесса, заранее зная нужное значение.
processName := "имя процесса"
readAddress := 0x2ECD0254
Numpad0::
if ProcessReadMemory(readAddress, processName) < 10
Click 123 234
return
ProcessReadMemory(address, processIDorName, type := "Int", numBytes := 4) {
VarSetCapacity(buf, numBytes, 0)
Process Exist, %processIDorName%
if !processID := ErrorLevel
throw Exception("Invalid process name or process ID:`n`n""" . processIDorName . """")
if !processHandle := DllCall("OpenProcess", "Int", 24, "UInt", 0, "UInt", processID, "Ptr")
throw Exception("Failed to open process.`n`nError code:`t" . A_LastError)
result := DllCall("ReadProcessMemory", "Ptr", processHandle, "Ptr", address, "Ptr", &buf, "Ptr", numBytes, "PtrP", numBytesRead, "UInt")
if !DllCall("CloseHandle", "Ptr", processHandle, "UInt") && !result
throw Exception("Failed to close process handle.`n`nError code:`t" . A_LastError)
if !result
throw Exception("Failed to read process memory.`n`nError code:`t" . A_LastError)
if !numBytesRead
throw Exception("Read 0 bytes from the`n`nprocess:`t" . processIDorName . "`naddress:`t" . address)
return (type = "Str")
? StrGet(&buf, numBytes)
: NumGet(buf, type)
}
Однако тут тоже не все шибко понятно, не смотря на то, что я прочитал статью Функции. Поэтому прошу кого-нибудь из опытных переписать данный код с комментариями на каждое действие, чтобы понять как, что, когда этот код делает.
Добавлено:
Наткнулся на удивительную вещь - https://github.com/Kalamity/SC2-MacroTr … Memory.ahk
Обновляется и по сей день. Вроде бы там есть тоже самое, что мне нужно, но пока не могу понять как это применить.