有以下一段代码: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' 使用进程标识符取得进程句柄
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If (pHandle = 0) Then
MsgBox "Couldn't get a process handle!"
Exit Sub
End If' 在内存地址中写入名字
WriteProcessMemory pHandle, &H40B181, "Beans", 5, 0&' 关闭进程句柄
CloseHandle hProcess
End Sub
说明:以上代码是关于外挂的初步知识。相信稍微研究过外挂的朋友都能看懂。由于小弟是菜鸟,特向大家请教。在此单击事件中,
为什么代码段:' 使用进程标识符取得进程句柄
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If (pHandle = 0) Then
MsgBox "Couldn't get a process handle!"
Exit Sub
End If每次得到的pHandle都为0,以在致于无法继续执行下面的程序。
在下已经完全按照文章要求进行操作(比如相关API声明、各控件初始化等):
为了让大家更能在下的意思,特把原文附上:[用VB制作修改器教程]
http://blog.csdn.net/paullbm/articles/806716.aspx
' 声明一些需要的变量
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' 使用进程标识符取得进程句柄
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If (pHandle = 0) Then
MsgBox "Couldn't get a process handle!"
Exit Sub
End If' 在内存地址中写入名字
WriteProcessMemory pHandle, &H40B181, "Beans", 5, 0&' 关闭进程句柄
CloseHandle hProcess
End Sub
说明:以上代码是关于外挂的初步知识。相信稍微研究过外挂的朋友都能看懂。由于小弟是菜鸟,特向大家请教。在此单击事件中,
为什么代码段:' 使用进程标识符取得进程句柄
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If (pHandle = 0) Then
MsgBox "Couldn't get a process handle!"
Exit Sub
End If每次得到的pHandle都为0,以在致于无法继续执行下面的程序。
在下已经完全按照文章要求进行操作(比如相关API声明、各控件初始化等):
为了让大家更能在下的意思,特把原文附上:[用VB制作修改器教程]
http://blog.csdn.net/paullbm/articles/806716.aspx
解决方案 »
- 用WebBrowser1打开网页的问题
- ADSI谁有?给我一份啊~~微软的下载不了了
- 程序运行方面的问题!
- 有关MsHFlexGrid的问题,请高手指点。
- 在datareport中可不可以一次打印多个报表?
- 请问谁知道Janus GridEx 2000控件正式版的下载地址,我1000分送上!!!
- 请问有没有办法使MDI窗体不出现标题栏以及最大、最小化按钮?谢!
- 请教:vista下虚拟XP的问题
- 谁能写一个自动将1000多个html文件按一定顺序读入word,转化成word文件的程序
- 寻找用于图象处理的低通和高通滤波程序的原代码!急!
- 关于VB中图表的生成
- 如何获取本地计算机所有用户名,标志,登陆类型,所属组及状态?
里的“计算器”是正确的。如果改成别的,就算打开计算器,都会出现“Window not found!"、
Const PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF=====================================
加入此行在程序编译时有错误,错误提示是“要求是常数表达式”
Public Const SYNCHRONIZE = &H100000
Public Const PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) 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 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 CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPrivate Const STANDARD_RIGHTS_REQUIRED = &HF0000
Private Const SYNCHRONIZE = &H100000
Private Const PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFFPrivate 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
' 使用进程标识符取得进程句柄
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If (pHandle = 0) Then
MsgBox "Couldn't get a process handle!"
Exit Sub
End If
' 在内存地址中写入名字
WriteProcessMemory pHandle, &H40B181, "Beans", 5, 0&
' 关闭进程句柄
CloseHandle pHandle
End Sub
楼主没什么错的,那个程序我粗略的看了看,和我写的一个内存修改器好象刷的是差不多的代码,但是是否应该把你的程序权限提升呢。
我认为你的问题就出在权限不够高。
这是我刷的一部分代码'======================提升进程权限的API函数常数定义=====================
Const STANDARD_RIGHTS_REQUIRED = &HF0000
Const TOKEN_ASSIGN_PRIMARY = &H1
Const TOKEN_DUPLICATE = (&H2)
Const TOKEN_IMPERSONATE = (&H4)
Const TOKEN_QUERY = (&H8)
Const TOKEN_QUERY_SOURCE = (&H10)
Const TOKEN_ADJUST_PRIVILEGES = (&H20)
Const TOKEN_ADJUST_GROUPS = (&H40)
Const TOKEN_ADJUST_DEFAULT = (&H80)
Const TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or TOKEN_ASSIGN_PRIMARY Or _
TOKEN_DUPLICATE Or TOKEN_IMPERSONATE Or TOKEN_QUERY Or TOKEN_QUERY_SOURCE Or _
TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or TOKEN_ADJUST_DEFAULT)
Const SE_PRIVILEGE_ENABLED = &H2
Const ANYSIZE_ARRAY = 1
Private Type LUID
lowpart As Long
highpart As Long
End Type
Private Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long'这个函数用于在WIN2000/XP/03/NT4+系统中,本进程提升权限
Sub AdjustTokenPrivileges2000()
Dim hdlProcessHandle As Long
Dim hdlTokenHandle As Long
Dim tmpLuid As LUID
Dim tkp As TOKEN_PRIVILEGES
Dim tkpNewButIgnored As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long
Dim lP As Long
hdlProcessHandle = GetCurrentProcess()
lP = OpenProcessToken(hdlProcessHandle, TOKEN_ALL_ACCESS, hdlTokenHandle)
lP = LookupPrivilegeValue("", "SeDebugPrivilege", tmpLuid)
tkp.PrivilegeCount = 1
tkp.Privileges(0).pLuid = tmpLuid
tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
lP = AdjustTokenPrivileges(hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded)
End SubOK,问题解决?