--------------------------------------------------------------------------------------------------------------------------------------------------------
應用實戰
--------------------------------------------------------------------------------------------------------------------------------------------------------
需要VBAPI函數:
FindWindow
GetWindowThreadaccessAsLong,ByValbInheritHandleAsLong,ByValdwProcessIdAsLong)AsLong
ReadProcessMemory
↓
PrivateDeclareFunctionReadProcessMemoryLib"kernel32"(ByValhProcessAsLong,ByVallpBaseAddressAsAny,ByVallpBufferAsAny,ByValnSizeAsLong,lpNumberOfBytesWrittenAsLong)AsLong
CloseHandle
↓
PrivateDeclareFunctionCloseHandleLib"kernel32"(ByValhObjectAsLong)AsLong
GetCurrentProcess
↓
PrivateDeclareFunctionGetCurrentProcessLib"kernel32"()AsLong
--------------------------------------------------------------------------------------------------------------------------------------------------------
需要的控件:Label、Timer(interval不為空)、Text
--------------------------------------------------------------------------------------------------------------------------------------------------------
定義函數:
DimSetHpAsInteger'定義設定的體力值
DimSetMpAsInteger'定義設定的魔法值
DimNowHpAsLong'定義目前的體力值
DimNowMpAsLong'定義目前的魔法值
DimMaxHpAsLong'定義角色的最高體力值
DimMaxMpAsLong'定義角色的最高魔法值
DimDiZhiAsLong'定義內存地址函數
DimhwndAsLong'儲存FindWindow函數返回的句柄
--------------------------------------------------------------------------------------------------------------------------------------------------------
代碼:
PrivateDeclareFunctionFindWindowLib"user32"Alias"FindWindowA"(ByVallpClassNameAsString,ByVallpWindowNameAsString)AsLong
PrivateDeclareFunctionGetWindowThreadProcessIdLib"user32"(ByValhwndAsLong,lpdwProcessIdAsLong)
AsLong
PrivateDeclareFunctionOpenProcessLib"kernel32"(ByValdwDesiredAccessAsLong,ByValbInheritHandleAsLong,ByValdwProcessIdAsLong)AsLong
PrivateDeclareFunctionReadProcessMemoryLib"kernel32"(ByValhProcessAsLong,ByVallpBaseAddressAsAny,ByVallpBufferAsAny,ByValnSizeAsLong,lpNumberOfBytesWrittenAsLong)AsLong
PrivateDeclareFunctionCloseHandleLib"kernel32"(ByValhObjectAsLong)AsLong
PrivateDeclareFunctionGetCurrentProcessLib"kernel32"()AsLong
DimSetHpAsInteger'定義設定的體力值
DimSetMpAsInteger'定義設定的魔法值
DimNowHpAsLong'定義目前的體力值
DimNowMpAsLong'定義目前的魔法值
DimMaxHpAsLong'定義角色的最高體力值
DimMaxMpAsLong'定義角色的最高魔法值
DimDiZhiAsLong'定義內存地址函數
PrivateFunctionncnr(lpADDressAsLong)AsInteger
'聲明一些需要的變量
DimhwndAsLong'儲存FindWindow函數返回的句柄
DimpidAsLong'儲存進程標識符(ProcessId)
DimpHandleAsLong'儲存進程句柄
hwnd=FindWindow(vbNullString,"封神榜·網絡版")
'取得進程標識符
GetWindowThreadProcessIdhwnd,pid
'使用進程標識符取得進程句柄
pHandle=OpenProcess(PROCESS_ALL_ACCESS,False,pid)
'在內存地址中讀取數據
ReadProcessMemorypHandle,lpADDress,ByValVarPtr(ncnr),4,0&
'關閉進程句柄
CloseHandlehProcess
EndFunction
ConstSTANDARD_RIGHTS_REQUIRED=&HF0000
ConstSYNCHRONIZE=&H100000
ConstSPECIFIC_RIGHTS_ALL=&HFFFF
ConstSTANDARD_RIGHTS_ALL=&H1F0000
ConstPROCESS_ALL_ACCESS=STANDARD_RIGHTS_REQUIREDOrSYNCHRONIZEOr&HFFF
ConstPROCESS_VM_OperaTION=&H8&
ConstPROCESS_VM_READ=&H10&
ConstPROCESS_VM_WRITE=&H20&
PrivateSubForm_Load()
'體力:07F68F3這里替換你所搜索到的地址魔法:07F6860同前
DiZhi=&H07F68F3
Timer1.Enabled=True
Timer2.Enabled=False
Timer3.Enabled=False
EndSub
PrivateSubTimer1_Timer()
DimhwndAsLong
hwnd=FindWindow(vbNullString,"封神榜·網絡版")
Ifhwnd=0Then
Label12.Caption="NowMp=ncnr(DiZhi 12)'獲取當前的魔法值
MaxHp=ncnr(DiZhi 4)'獲取角色的最高體力值
MaxMp=ncnr(DiZhi 16)'獲取角色的最高魔法值
Label3.Caption=Str(NowHp) "/" Str(MaxHp)'顯示角色體力值狀態
Label4.Caption=Str(NowMp) "/" Str(MaxMp)'顯示角色魔法值狀態
IfCheck1.ValueThen
Timer2.Enabled=True
Else
Timer2.Enabled=False
EndIf
IfCheck2.ValueThen
Timer3.Enabled=True
Else
Timer3.Enabled=False
EndIf
EndSub
PrivateSubTimer2_Timer()
'體力值小于設定值按下數字鍵1
If(NowHp)<SetHpThen
SendKeys"1"
EndIf
EndSub
PrivateSubTimer3_Timer()
'魔法值小于設定值按下數字鍵2
If(NowMp)<SetMpThen
SendKeys"2"
EndIf
EndSub
--------------------------------------------------------------------------------------------------------------------------------------------------------
新聞熱點
疑難解答