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裡嗎?
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裡嗎?
解决方案 »
- 怎么用属性更改事件来触发一个事件?比如一个按钮的color值变时触发一个事件?
- yy
- 小弟穷最后10分了。请大虾帮忙看看该存储过程错在哪??????
- 下面的程序错那了?
- treeview如何才能在From_Load时某个节点自动被选中
- 大哥们!请问 怎么在VB里给一个工程里各个窗口换图表啊? 在窗体的Icon里换吗?请问图表放在哪个文件夹里?我找半天没找找
- 高手进来,这段取硬盘ID的代码,怎么才能编译通过了。200分
- 请指点迷津!!!跪求!!!
- 好久没来了,这里比以前更热闹了!有个问题,大家多多帮忙!
- 请教高手,在获得一个窗口的句柄后,如何获得这个窗口中标签的、文本框的内容?(高分奉上)
- 求助!!关于定时关机程序的编写!!
- 在VB MSCHART的散点图中如何用ToolTipText读取数据点的值?
缺什么声明自己查了之后加上。