当前位置:编程学习 > VB >>

vb 读取内存+IF

Private Sub Timer8_Timer()
     hwnd1 = FindWindow(vbNullString, "海之乐章 【" & d & "】")
     GetWindowThreadProcessId hwnd1, pid
     pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
     ReadProcessMemory pHandle,&H316040B , 1150419196, 4, 0&
     CloseHandle pHandle
     Timer7.Interval = 1000
End Sub

问下如果读取内存&H316040B,如果它的值等于1150419196,msgbox“成功”否则msgbox“失败"。。 下面是我写的 谁指点下哪错了?

if &H316040B=1150419196 then
msgbox“成功”
else
msgbox“失败"
end if --------------------编程问答-------------------- BOOL WINAPI ReadProcessMemory(
  __in          HANDLE hProcess,
  __in          LPCVOID lpBaseAddress,
  __out         LPVOID lpBuffer,
  __in          SIZE_T nSize,
  __out         SIZE_T* lpNumberOfBytesRead
);

 这是这个API 的用法 第二个参数你就应该传递要读取的地址,第三个参数你应传递一个缓冲区,而不是一个立即数!,第四个参数是缓冲的大小。这个API 如成功会将读取的值放入缓冲区中。然后用这个缓冲区的值与 1150419196  比较才对。 --------------------编程问答-------------------- ReadProcessMemory pHandle,&H316040B , value, 4, 0& 
if value = 1150419196 then
msgbox“成功” 
else 
msgbox“失败" 
end if --------------------编程问答--------------------  十六进制的&H316040B是十进制的51774475 ,&H316040B=1150419196永远不可能.
if &H316040B=1150419196 then 相当于if 3=8 then
--------------------编程问答--------------------
引用 2 楼 michael_g 的回复:
ReadProcessMemory pHandle,&H316040B , value, 4, 0&
if value = 1150419196 then
msgbox“成功”
else
msgbox“失败"
end if


是不是
dim Value as long

Private Sub Timer8_Timer()
    hwnd1 = FindWindow(vbNullString, "海之乐章 【" & d & "】") 
    GetWindowThreadProcessId hwnd1, pid
    pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
    ReadProcessMemory pHandle, &H316040B, Value, 4, 0&
    CloseHandle pHandle
If Value = 1127812301 Then
MsgBox "成功"
Else
MsgBox "失败"
End If
End Sub --------------------编程问答-------------------- 失败啊  
我把iF后面换成Value = Label3.Caption 可是调试出现了 实时错误13 类型不般配
不知道哪错了 --------------------编程问答-------------------- 一个数字,一个字符串,当然不行,
把Label3.caption改称val(Label3.caption) --------------------编程问答--------------------
引用 6 楼 flyer_2001 的回复:
一个数字,一个字符串,当然不行,
把Label3.caption改称val(Label3.caption)

不会出错了,不过一直显示Label3 --------------------编程问答-------------------- --------------------编程问答-------------------- 仔细看看ReadProcessMemory  --------------------编程问答-------------------- AdjustTokenPrivileges --------------------编程问答-------------------- 单步调试一下,看看你的Value的值是多少?可能有错误 --------------------编程问答-------------------- 每次调用API后,都要检查返回值.

因为API不像VB6那样,有错给你自动报出来,你要向API"问".

API执行的情况,就在其返回值上表现出来.

这里给你一个简单封装,可以将API执行不正常时的返回值翻译为中文,方便调试:

http://www.m5home.com/bbs/thread-2509-1-1.html --------------------编程问答-------------------- 返回值都不检查,你连问题出在哪一步都不知道,还调试个啥呢....对吧.
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,