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

[VB]關於使用Ilvmoney作openprocess

RT 我在網上找到這篇文 裡頭說到用Ilvmoney作openprocess

  Public Declare Function OP Lib "IlvMoney.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Private Sub Command1_Click()
appHwnd = FindWindow(" Client", " Client")
hProcessID = RunDll32Add5("user32", "GetWindowThreadProcessId", hwnd, VarPtr(processID))
hProcess = RunDll32("IlvMoney", "OP", PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, 0, hProcessID)
End Sub
Public Function RunDll32(LibFileName As String, ProcName As String, ParamArray Params()) As Long
Dim hProc As Long
Dim hModule As Long
Dim i As Long, CodeStar As Long
ReDim OpCode(400 + 6 * UBound(Params)) '保留用来写OPCODE
'读取模组
hModule = LoadLibrary(ByVal LibFileName)
If hModule = 0 Then
MsgBox "Library读取失败"
Exit Function
End If
'取得函数位址
hProc = GetProcAddress(hModule, ByVal ProcName)
If hProc = 0 Then
MsgBox "函数读取失败", vbCritical
FreeLibrary hModule
Exit Function
End If
'---以下为Assembly--
'程序起始位址必须是16的倍数
CodeStar = (VarPtr(OpCode(0)) Or &HF) + 1
opIndex = CodeStar - VarPtr(OpCode(0)) '程序开始的元素位置
'前端部份以中断点填满
For i = 0 To opIndex - 1
OpCode(i) = &HCC 'int 3
Next
'--------以下开始放入所需的程序----------
'将参数push到堆迭
'由于是STDCall CALL 参数由最后一个开始放到堆迭
For i = UBound(Params) To 0 Step -1
AddByteToCode &H68 'push
AddLongToCode CLng(Params(i)) '参数位址
Next i
'call hProc
AddByteToCode &HE8 'call
AddLongToCode hProc - VarPtr(OpCode(opIndex)) - 4 '函数位址 用call的定址
'-----------结束所需的程序--------------
'返回呼叫函数
AddByteToCode &HC2 'ret 10h
AddByteToCode &H10
AddByteToCode &H0
'执行刚刚写完的Assembly Code
RunDll32 = CallWindowProc(CodeStar, 0, 1, 2, 3)
FreeLibrary hModule '释放模组
End Function


就在RunDll32Add5出錯了

提示:"沒有定義這個Sub或Function"

哭阿 

要怎麼解決??

還是有其他的寫法嗎?

順帶一提:裡面有說使用Assembly

是直接寫在VB裡嗎? --------------------编程问答-------------------- 请问兰州是台湾人么?能麻烦用简体么? --------------------编程问答-------------------- 你把 RunDll32Add5 改成 RunDll32 试试。

所有函数在使用之前都必须声明。你下面声明的是RunDll32,而不是RunDll32Add5,所以用RunDll32Add5会报错。 --------------------编程问答--------------------
引用 2 楼 slowgrace 的回复:
你把 RunDll32Add5 改成 RunDll32 试试。

 所有函数在使用之前都必须声明。你下面声明的是RunDll32,而不是RunDll32Add5,所以用RunDll32Add5会报错。

抱歉阿 我是台湾人 没将繁转简

这样可以了 但是下面的LoadLibrary又出同样错误

唉.好像很多都没宣告阿 --------------------编程问答-------------------- 加上这个声明:

Private Declare Function LoadLibrary Lib "kernel32.dll" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
--------------------编程问答-------------------- 这样吧,你下个APIViewer


缺什么声明自己查了之后加上。 --------------------编程问答-------------------- XiXi够狠的,居然要10分~~~~~~

--------------------编程问答--------------------
引用 6 楼 chen8013 的回复:
XiXi够狠的,居然要10分~~~~~~

啥意思?不明真相......
补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,