Что нового

[Автоматизация] Привязка к процессу по PID

Owlstar

Новичок
Сообщения
3
Репутация
0
Всем привет!
Возможно ли в AutoIT как в других подобных софтинах привязаться к процессу по PID, чтобы в дальнейшем читать память процесса?
 

ra4o

AutoIT Гуру
Сообщения
1 153
Репутация
240
Возможно :
Код:
_WinAPI_ReadProcessMemory(...)
 
Автор
O

Owlstar

Новичок
Сообщения
3
Репутация
0
ra4o сказал(а):
Возможно :
Код:
_WinAPI_ReadProcessMemory(...)
Спасибо, посмотрел, скорей всего так и есть, но очень громоздка конструкция чтения памяти в AutoIT получается. Единственное почему я хотел проверить в AutoIT это то что другие кликеры считывают 4 или 8 байт памяти но целое, а мои данные хранятся в 8 байтах с точкой и я хотел избавится от танцев с бубном в переводе там. Если есть, кто знает, можете подсказать читает ли AutoIT корректно из памяти процесса 8 байтовые значения с точкой? То очень не хочется связываться вот с таким здесь огородом:

Код:
Func _ReadWriteMemory()
    $hWnd = WinGetHandle('[Title:Тестовая программа; Class:AutoIt v3 GUI]')
    If $hWnd Then
        $iPid = WinGetProcess($hWnd)
        If $iPid Then
            $iAddress = ControlGetText($hWnd, '', '[Class:Edit; Instance:1]')
            If $iAddress > 0 Then
                $iAddress = Int($iAddress);адрес памяти внешнего процесса
                $hProcess = _WinAPI_OpenProcess($PROCESS_ALL_ACCESS, 0, $iPid)
                If $hProcess Then
                    Local $iRead, $iWrite, $t = DllStructCreate('WORD')
                    For $i = 1 To 10
                        If ProcessExists($iPid) Then
                            ; Чтение значения памяти
                            _WinAPI_ReadProcessMemory($hProcess, $iAddress, DllStructGetPtr($t), 2, $iRead)
                            $iVal = DllStructGetData($t, 1)
                            $iVal += 5
                            ; Запись значения в память
                            DllStructSetData($t, 1, $iVal)
                            _WinAPI_WriteProcessMemory($hProcess, $iAddress, DllStructGetPtr($t), 2, $iWrite)
                        Else
                            ExitLoop
                        EndIf
                        Sleep(1000)
                    Next
                    If ProcessExists($iPid) Then
                        _WinAPI_CloseHandle($hProcess); Открытый процесс необходимо закрывать
                    EndIf
                Else
                    MsgBox(16+4096, 'Ошибка', 'Не удалось открыть память тестовой программы')
                EndIf
            Else
                MsgBox(16+4096, 'Ошибка', 'Не найден адрес памяти тестовой программы')
            EndIf
        Else
            MsgBox(16+4096, 'Ошибка', 'Не найден процесс тестовой программы')
        EndIf
    Else
        MsgBox(16+4096, 'Ошибка', 'Не найдено окно тестовой программы')
    EndIf
EndFunc
 

blacklis

Новичок
Сообщения
64
Репутация
1
NomadMemory.au3
имеет openprocess
где-то тут есть, гуглится, могу скинуть исходник
 
Автор
O

Owlstar

Новичок
Сообщения
3
Репутация
0
Благодарю, файл нашел, то что нужно.
 
Верх