Как сделать запись значения в память процесса при введении желаемого значения по одному из 135 текстовых полей "Input"? Есть код, который считывает значения в 135 "Input" с таймером, раз в секунду. Нужно чтоб в любом текст. поле "Input" при нажатии кнопок на клавиатуре (OnKeyPress) таймер останавливался, чтоб можно было менять значение и при вводе в "Input" желаемого значения и нажатии кнопки 'Enter' делать запись в память по определенному адресу.
Второй воррос: Какие еще есть события, в контроле "Input", кроме OnChange, что бы остановить таймер? При считывании из памяти, в текстовом поле нельзя изменить значение, потому что значение обновляется каждую секунду, а нужно ввести желаемое значение в текст. поле и записать это значение в память по адресу 0x9E8625. (Input это текстовое поле ввода)
Вопрос № 3: Этот код выше можно как-то улучшить, оптимизировать?
Второй воррос: Какие еще есть события, в контроле "Input", кроме OnChange, что бы остановить таймер? При считывании из памяти, в текстовом поле нельзя изменить значение, потому что значение обновляется каждую секунду, а нужно ввести желаемое значение в текст. поле и записать это значение в память по адресу 0x9E8625. (Input это текстовое поле ввода)
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <NomadMemory.au3>
#Include <Timers.au3>
#Include <WinAPIEx.au3>
#Region ### START Koda GUI section ### Form=
Local $Form1 = GUICreate("Form1", 754, 553, 192, 124)
Local $aInput[135], $c = 0, $nMsg
For $y = 0 To 8
For $a = 0 To 14
$aInput[$c] = GUICtrlCreateInput('Input' & $a+1 + $y*15, 12+$y*80, 32+$a*32 , 55, 21)
$c += 1
Next
Next
$process = "ePSXe.exe"
$pid = 0 ;Set game PID to 0
$timedelay = _Timer_Init() ;Start delay timer
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $aInput[0] To $aInput[UBound($aInput) - 1]
;ConsoleWrite("Input " & $nMsg - $aInput[0] & " has been modified" & @CRLF)
EndSwitch
If $pid = 0 And _Timer_Diff($timedelay) > 1000 Then ;Check if PID not found yet, and delay is more than 1000 milliseconds
$pid = ProcessExists($process) ;If game exists get the PID
If $pid > 0 Then ;Game exist?
$hwnd = _MemoryOpen($pid) ;Opens a process and enables all possible access rights to the process
EndIf
$timedelay = _Timer_Init() ;Reset delay timer
ElseIf $pid > 0 And _Timer_Diff($timedelay) > 1000 Then ;Check if PID found and delay is more than 1000 milliseconds
$Static = "0x" & Hex(4194304 + 6194725) ;Base address 0x400000 + 5E8625 (address in decimal)
For $x = 0 To 134
local $offset = 132* Int($x / 15) + Mod($x,15)
$readvalue = _MemoryRead($Static+$offset, $hwnd, 'BYTE') ;Static address
GUICtrlSetData($aInput[$x], $readvalue)
Next
$timedelay = _Timer_Init() ;Reset delay timer
EndIf
WEnd
Вопрос № 3: Этот код выше можно как-то улучшить, оптимизировать?
Последнее редактирование: