Viktor1703
AutoIT Гуру
- Сообщения
- 1,535
- Репутация
- 413
Предположим есть структура:
Некоторые функции запрашивают указатель на эту структуру который добывается с помощью:
После чего возврящается некий хэндл (указатель), хочется узнать, как функции добывают данные из структуры используя лишь её указатель?
Всё, разобрался как работает, мы просто в памяти ищем по определённому адресу значения а адрес это и есть указатель на структуру:
Код:
Global $tRECT = DllStructCreate("int;int;int;int")
DllStructSetData($tRECT, 1, 20)
DllStructSetData($tRECT, 2, 20)
DllStructSetData($tRECT, 3, 200)
DllStructSetData($tRECT, 4, 35)
Некоторые функции запрашивают указатель на эту структуру который добывается с помощью:
Код:
Global $tRECT = DllStructCreate("int;int;int;int")
DllStructSetData($tRECT, 1, 20)
DllStructSetData($tRECT, 2, 20)
DllStructSetData($tRECT, 3, 200)
DllStructSetData($tRECT, 4, 35)
$Ptr = DllStructGetPtr($tRECT) ; Указатель на структуру
После чего возврящается некий хэндл (указатель), хочется узнать, как функции добывают данные из структуры используя лишь её указатель?
Всё, разобрался как работает, мы просто в памяти ищем по определённому адресу значения а адрес это и есть указатель на структуру:
Код:
#Include <WinAPIEx.au3>
Global $tRECT = DllStructCreate("int;int;int;int")
DllStructSetData($tRECT, 1, 20)
DllStructSetData($tRECT, 2, 20)
DllStructSetData($tRECT, 3, 200)
DllStructSetData($tRECT, 4, 35)
$Value = GetStructData(DllStructGetPtr($tRECT))
MsgBox(0, "Info", $Value[0] & @CRLF & $Value[1] & @CRLF & $Value[2] & @CRLF & $Value[3])
Func GetStructData($iPtr)
Local $hData[4]
Local $iHandle = _WinAPI_OpenProcess(BitOR(0x001F0FFF, 0x00000008), False, @AutoItPID)
Local $tBuffer = DllStructCreate("int;int;int;int")
_WinAPI_ReadProcessMemory($iHandle, $iPtr, DllStructGetPtr($tBuffer), DllStructGetSize($tBuffer), 0)
$hData[0] = DllStructGetData($tBuffer, 1)
$hData[1] = DllStructGetData($tBuffer, 2)
$hData[2] = DllStructGetData($tBuffer, 3)
$hData[3] = DllStructGetData($tBuffer, 4)
Return $hData
EndFunc