| 发表于:2007-03-06 20:47:22 楼主 |
我用vb来读取一个游戏的内存,在模块里声明了findwindow,getwindowthreadprocessid,openprocess,writeprocessmemory,readprocessmemory,closehandle,formatmessage,getlasterror等api函数,都是抄教科书的,应该没任何问题。但是在form中,代码如下: dim hwnd as long dim pid as long dim phandle as long hwnd = findwindow(vbnullstring, "biohazard 4 ") if (hwnd = 0) then msgbox "未找到窗口biohazard 4 ", , "修改器 " exit sub else getwindowthreadprocessid hwnd, pid phandle = openprocess(&h1f0fff, false, pid) if (phandle = 0) then msgbox "未找到句柄 ", , "修改器 " exit sub end if 这里遇到第一个问题,若phandle = openprocess(&h1f0fff, false, pid)改成phandle = openprocess(process_all_access, false, pid),弹出消息“未找到句柄”。究竟&h1f0fff这个地址有何特别,用它能找到游戏,而用process_all_access却找不到游戏? 第二个问题,用true和false对vb程序本身有何影响? dim lpbuffer as long readprocessmemory phandle, &h7121636, lpbuffer, 4, 0& print lpbuffer &h7121636是游戏中一个不为0的地址,因为lpbuffer被定为长整型,所以第四个参数我写了4,想读取&h7121636至&h7121639四个字节的数据。令我难过的是,打印结果总是0。 第三个问题,第五个参数就本问题,0&是什么意思(我其实不懂,是抄writeprocessmemory的做法)?如果有错,应改成什么好? 第四个问题,readprocessmemory用错在哪,如何改正? 第五个问题,作为long型数据,lpbuffer能否正确读取超过4个字节的数据?如何做?或者是如何用一次readprocessmemory读取四个字节数据? 第六个问题,假如lpbuffer正确读取了内存数据——十六进制数23,那么打印结果是16进制数23呢,还是10进制数35,或是字符串&h23,字符串23,或者别的? 第七个问题,请哪位有做游戏内外挂经验的老手就我本来的意图将这两段程序改正?有个经验参考最好了。 |
|
|
|
|