一个新手的疑惑???(在线)
你好,我将尽可能把我的想法表述清楚,也请你万分耐心,谢谢!
1 在VB中新建一个新工程:(form.caption="cool")
Dim a As Long
---------------------------------
Private Sub Form_load()
a = 10 ‘注意
MsgBox VarPtr(a) ‘弹出对话框给后一工程指示a的地址。
End Sub
---------------------------------
Private Sub form_click()
MsgBox a
End Sub
---------------------------------
2 然后生成cool.exe文件
3 在新建另一工程:
Private Declare Function WriteProcessMemory Lib "kernel32" ( _
ByVal hProcess As Long, _
lpBaseAddress As Any, _
lpBuffer As Any, _
ByVal nSize As Long, _
lpNumberOfBytesWritten As Long) _
As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" ( _
ByVal Hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) _
As Long
Private Declare Function CloseHandle Lib "kernel32" ( _
ByVal hObject As Long) _
As Long
Const PROCESS_VM_OPERATION = &H8
Const PROCESS_VM_READ = &H10
Const PROCESS_VM_WRITE = &H20
Const PROCESS_ALL_ACCESS = 0
dim b as long
--------------------------------------------------------------------
Private Sub Form_Load()
b = 99 '注意
End Sub
--------------------------------------------------------------------
Private Sub Form_click()
Dim OutAdress As Long
Dim OWhwnd As Long
Dim OPid As Long
Dim OPhwnd As Long
OutAdress = InputBox("", "") '输入先前弹出a的地址
OWhwnd = FindWindow(vbNullString, "cool")
lret = GetWindowThreadProcessId(OWhwnd, OPid)
OPhwnd = OpenProcess(PROCESS_ALL_ACCESS, False, OPid)
lret = WriteProcessMemory(OPhwnd, Hex(OutAdress), varptr(b), 4&, 0&)
CloseHandle OPhwnd
End Sub
----------------------------------------------------------------------
4 运行cool.exe
5 单击对话窗,弹出对话框给后一工程指示a的地址。
6 运行后建的工程,单击窗体
7 在单击cool.exe窗体,输入先前弹出a的地址,然后...
我的目的未达到,弹出的对话框中显示a的值还为10,未
变为99。
8 我想请问,到底是哪一个细节出了错误???
9 最后,万分感谢!!!