03CACF28 这个是鬼武者3的HP血量地址.....
我想知道用什么途径可以得到自己想要的地址??(不用金山等软件,自己找  )另:我在程序中这么测试
Form1窗体
  Option Explicit
Dim ss As String
Dim kk As StringPrivate Sub Command1_Click()
  Text1.Text = VarPtr(ss)
  Text2.Text = VarPtr(kk)
End SubPrivate Sub Form_Load()
  ss = "nihao1234567890123456789012345678901234567890"
End Sub运行,点 command1 得到  ss的地址
假设得到的ss 地址为:   &H1FE0B4
在另外一个程序里用以下代码 试图读取ss内存里的内容        Dim hwnd As Long ' 储存 FindWindow 函数返回的句柄
        Dim pid As Long ' 储存进程标识符( Process Id )
        Dim pHandle As Long ' 储存进程句柄
        hwnd = FindWindow(vbNullString, "Form1")
        
        ' 取得进程标识符
        GetWindowThreadProcessId hwnd, pid
        
        ' 使用进程标识符取得进程句柄
        pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
        
        ' 在内存地址中读取数据        lpADDress= &H1FE0B4    ''''前面得到的SS的地址
        ReadProcessMemory pHandle, lpADDress, ByVal VarPtr(ncnr), 4, 0&  ''''''VarPtr是取变量地址的
        
        ' 关闭进程句柄
         CloseHandle pHandle
         MsgBox ncnr可是为什么读取的不是ncnr  不是我在ss里的值  ss = "nihao1234567890123456789012345678901234567890"呢????
我是看了很多资料  这么写的,,,是不是我写的不对???
应该怎么读取  ss变量的值出来呢???

解决方案 »

  1.   

    我记得这么做是不能取得其他进程中的数据的WINDOWS中进程之间是互相隔绝的以前好象看见过贴子 要取其他进程中数据的话 是得插入1个DLL的
      

  2.   

    1、api声明时应该 做一个调整 
    Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, _
    lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long2、 Text1.Text = VarPtr(ss) 要改为 Text1.Text = strPtr(ss)这是因为字符串的变量地址和其它变量的地址略有不同3、在ReadProcessMemory 要将缓冲区准备好
    dim ncnr as string
    ncnr=space(255)4、ReadProcessMemory pHandle, lpADDress, ByVal ncnr, ByVal 4, 0&
    还是因为字符串的地址问题要改为上面的语句。
    5、另注意,由于字符串在内在中是Unicode方式,所以长度会变为双倍,这时你要注意BYVAL 4的大小
      

  3.   

    thanksdebug.Print strconv(ncnr,vbFromUnicode)