给你个简单的,免得你看不懂 Private Sub Command1_Click() Dim ReturnValue, I ReturnValue = Shell("CALC.EXE", 1) ' 运行计算器 AppActivate ReturnValue ' 激活计算器 DoEvents For I = 1 To 100 ' 设置计数循环 SendKeys I & "{+}", True ' 按下按键给计算器 Next I ' 将所有 I 值相加 SendKeys "=", True ' 取得总和 SendKeys "%{F4}", True ' 按 ALT+F4 关闭计算器 End Sub
1.用findwindow函数查找窗口,用getwindolwthreadprocessid 读取窗口句柄的PID,用openprocess获取pid句柄,用writeprocessmemory或者readprocessmemory对内存进行读写操作.
2.直接读取进程pid,道理一样,但是好处是某些游戏找不到窗口句柄的话可以直接获取进程。当然第一种方法较简单,如果你想学习外挂编写,建议你先学习汇编基础。至于网络游戏需要提权才可以使用这2个函数。
Private Sub Timer1_Timer()
Dim hWnd As LongConst STANDARD_RIGHTS_REQUIRED = &HF0000
Const SYNCHRONIZE = &H100000
Const PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF)hWnd = FindWindow("Digimon RPG", "Digimon RPG")
If hWnd = 0 Then Label3.Caption = "未找到游戏窗口": Exit Sub
GetWindowThreadProcessId hWnd, pid
If pid = 0 Then Label3.Caption = "获取Pid失败": Exit Sub
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If pHandle = 0 Then Label3.Caption = "打开进程失败": Exit Sub Else Label3.Caption = "正常"Label2.Caption = ADD2VAL(&H9FC070) 'moneyLabel6.Caption = ADD2VAL(&H9FB8B8) 'exp
Label8.Caption = ADD2VAL(&H9FB8CC)Label10.Caption = ADD2VAL(&HA4DAA8) 'x
Label12.Caption = ADD2VAL(&HA4DAAC) 'yLabel15.Caption = ADD2VAL(&H9FB89C) 'hp
Label17.Caption = ADD2VAL(&H9FB8C0)Label16.Caption = ADD2VAL(&H9FB8A0) 'vp
Label18.Caption = ADD2VAL(&H9FB8C4)
CloseHandle pHandle
End Sub
Function ADD2VAL(ByVal WhatAdd As Long) As StringDim by(4) As Byte
Dim TempHEX, TempB As String
ReadProcessMemory pHandle, ByVal WhatAdd, VarPtr(by(0)), UBound(by), 0For i = 3 To 0 Step -1
If Len(Hex(by(i))) < 2 Then TempB = "0" & Hex(by(i)) Else TempB = Hex(by(i))
TempHEX = TempHEX & TempB
'TempHEX = Hex(by(3)) & Hex(by(2)) & Hex(by(1)) & Hex(by(0))
Next
'Debug.Print TempHEXADD2VAL = HEX_to_DEC(TempHEX)'将十六进制转化为十进制,网上有就不发了
End Function
另外有高人写过VB模拟Asm的类,
《汇编基础类》
名 称: clsASM
作 者:孙 林
这些关键词,百度一下很好找用此类的方法:
Dim asm As New clsASM '打坐
With asm ' asm
.Pushad ' pushad
.Mov_EAX &H4B52F0 ' Mov EAX,&H????
.Call_EAX ' call pointer(eax)
.Popad ' popad
.Ret
End With ' end
asm.Run_ASM pid希望这些信息对lz有用,其实最重要的还是靠分析
论坛签名======================================================================
当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html如何给分和结贴?
http://community.csdn.net/Help/HelpCenter.htm#结帖如何给自己的回帖中也加上签名?
http://blog.csdn.net/q107770540/archive/2011/03/15/6250007.aspx
Private Sub Command1_Click()
Dim ReturnValue, I
ReturnValue = Shell("CALC.EXE", 1) ' 运行计算器
AppActivate ReturnValue ' 激活计算器
DoEvents
For I = 1 To 100 ' 设置计数循环
SendKeys I & "{+}", True ' 按下按键给计算器
Next I ' 将所有 I 值相加
SendKeys "=", True ' 取得总和
SendKeys "%{F4}", True ' 按 ALT+F4 关闭计算器
End Sub