我正在使用我想监视事件的 readprocessmemory 从应用程序中读取 CHAT。
Attach() 'attach to process
Dim chatStart As Integer = &H6E3220
Dim lines As Integer = 150 'chatlines
Dim offset As Integer = 98 'offset between chat lines
Dim arrAddressList(0 To lines) As IntPtr
Dim addressToAdd As IntPtr = chatStart 'first line
arrAddressList(0) = addressToAdd 'assign firstline
For i = 1 To lines 'loop the other 149 lines and assign the address
chatStart += offset 'skip to the address of the next line
arrAddressList(i) = chatStart 'assign the new address to its place in the array
Next
For j = 0 To arrAddressList.Count - 1
Dim chatText As String = MEMMGR.ReadAsciiString(arrAddressList(j), 104)
If chatText = "" Then 'chat lines not filled, exit
Exit For
Else
AddLog(chatText) 'puts into text box
End If
Next
如果应用程序刚刚启动,并且所有行都没有填满,则无需循环所有 150 行。
聊天框最多 150 行,当达到 150 时,所有聊天都被推上去,所以第 150 行现在是最新的聊天文本行。
我当前的代码将读取聊天框中的所有聊天内容。
我能想到的检测更改的唯一方法是将其全部读取两次,然后比较结果并循环,直到它在数组中找到不同的行 - 这些将是“更新”的行。根据聊天的活跃程度,可能会更新不止一行,因此需要另一个数组包含上次聊天检索后的所有行更改。
但是,当我开始做这件事时,我不知道从哪里开始,因为这似乎很令人困惑,在这件事上有更多逻辑的人能否指出我正确的方向,或者解释最好(最快)的方法来做到这一点?
非常感谢您花时间阅读本文,我希望它不会太混乱。