回 帖 发 新 帖 刷新版面

主题:[讨论]VB做计算机修改器出现问题

本人是个菜鸟 在计算器修改器出现问题 请各位大哥指教
Private Sub btnPasteName_Click()
' 声明一些需要的变量
Dim hwnd As Long ' 储存 FindWindow 函数返回的句柄
Dim pid As Long ' 储存进程标识符( Process Id )
Dim pHandle As Long ' 储存进程句柄

' 首先取得目标窗口的句柄
hwnd = FindWindow(vbNullString, "计算器")
If (hwnd = 0) Then
MsgBox "Window not found!"
Exit Sub
End If

' 取得进程标识符
GetWindowThreadProcessId hwnd, pid
Dim open_access As Long
    open_access = &H30
    pHandle = OpenProcess(open_access, False, pid)

    
' 使用进程标识符取得进程句柄

If (pHandle = 0) Then
MsgBox "Couldn't get a process handle!"
Exit Sub
End If

' 在内存地址中写入名字
WriteProcessMemory pHandle, &H1B28DD9, "Beans", 5, 0&

' 关闭进程句柄
CloseHandle hProcess
End Sub
代码就是上面这些
就是用内存搜索地址搜索不到唯一的内存地址   
而且就算我把GE搜索到的内存地址都试了 都没用!他都不会写入Beans字符
运行时是没错的 只是按了没什么反应!
还有Dim open_access As Long
    open_access = &H30   这个不怎么懂
到底是哪出了问题

回复列表 (共3个回复)

沙发

要分2种情况对待:
1、目标地址是UNICODE字符串:
WriteProcessMemory pHandle, ByVal &H1B28DD9, ByVal StrPtr("Beans"), 6*2, 0

2、目标地址非UNICODE字符串:
WriteProcessMemory pHandle, ByVal &H1B28DD9, ByVal "Beans", 6*1, 0

Dim open_access As Long
open_access = &H30

这个参数是用来指定打开进程句柄的权限的,
PROCESS_ALL_ACCESS
PROCESS_VM_OPERATION (0x0008)
PROCESS_VM_READ (0x0010)
PROCESS_VM_WRITE (0x0020)
你写内存的话应该用PROCESS_VM_WRITE

板凳

谢谢你的回复 
不过还有问题不设置那个权限的话 他就显示Couldn't get a process handle
这又是为什么难道 一定要加上那两句话?
用你的语句貌似还是不行- -  不过还是谢谢

3 楼

试下组合,我一般是用这2个的(因为我代码里经常还需要申请分配内存)
PROCESS_VM_OPERATION Or PROCESS_VM_WRITE

我来回复

您尚未登录,请登录后再回复。点此登录或注册