ghost 時速度讀取?【已解决】
本帖最后由 jericho0711 于 2016-3-30 22:08 编辑查了一下好像ghost本身也沒有指令可以輸出ghost時的數值,不知道有沒有辦法去讀取ghost時的speed數值?
http://i.imgur.com/szNkJ0y.jpg 那个值有什么用呢?本来应该就只是个大概的值。标题有进度可以直接读取,如果你需要的是进度的话。或者知道初始时间和文件大小也可以算出speed 本帖最后由 skyfree 于 2016-3-26 07:40 编辑
如果只是进度的话,GHOST11以上可以直接读标题栏 我有点蛋疼。 本帖最后由 zch11230 于 2016-3-25 16:32 编辑
凑合看看。获取模块基址用了大漠插件,求大神给个纯AU的方法。 回复 5# zch11230
论坛搜索汇编会得到你想要的 凑合看看。获取模块基址用了大漠插件,求大神给个纯AU的方法。
zch11230 发表于 2016-3-25 16:30 http://www.autoitx.com/images/common/back.gif
小弟要的就是這個效果,不過對au沒有這麼熟,這幾天找時間消化一下,先試玩看看用大漠插件的方式~~ 凑合看看。获取模块基址用了大漠插件,求大神给个纯AU的方法。
zch11230 发表于 2016-3-25 16:30 http://www.autoitx.com/images/common/back.gif
想請問一下,ghostce.au3裡面有一段
$ad2 = "0x" & Hex($ad1 + 0x331278)
其中0x331278是固定的嗎?因為小弟在自己的站台上執行,必須要修改成0x3c8140才可以執行。 回复 8# jericho0711
在同一个软件下是固定的,这是11.0.2的基址,在11.5.1中是ghost32.exe+3D0BA0,其它版本不一样,用ce搜就可以了。 另外其实论坛已经有纯AU取基址的示例了,我居然没第一时间搜论坛。还是在百度搜到的论坛。。。。。。。
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 100, 50, -1, -1)
$Label1 = GUICtrlCreateLabel("Label1", 10, 10, 90, 40)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$pid = WinGetProcess("", "")
$ad1 = _MemoryModuleGetBaseAddress($pid, "ghost32.exe")
$ad2 = $ad1 + 0x3D0BA0
$mem = _MemoryOpen($pid)
WinSetOnTop(HWnd($Form1), "", 1)
AdlibRegister("_getvalue")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
_MemoryClose($mem)
Exit
EndSwitch
WEnd
Func _getvalue()
$value = _MemoryRead($ad2, $mem, "dword")
GUICtrlSetData($Label1, $value)
EndFunc ;==>_getvalue
Func _MemoryModuleGetBaseAddress($iPID, $sModule)
If Not ProcessExists($iPID) Then Return SetError(1, 0, 0)
If Not IsString($sModule) Then Return SetError(2, 0, 0)
Local $PSAPI = DllOpen("psapi.dll")
;Get Process Handle
Local $hProcess
Local $PERMISSION = BitOR(0x0002, 0x0400, 0x0008, 0x0010, 0x0020) ; CREATE_THREAD, QUERY_INFORMATION, VM_OPERATION, VM_READ, VM_WRITE
If $iPID > 0 Then
Local $hProcess = DllCall("kernel32.dll", "ptr", "OpenProcess", "dword", $PERMISSION, "int", 0, "dword", $iPID)
If $hProcess Then
$hProcess = $hProcess
EndIf
EndIf
;EnumProcessModules
Local $Modules = DllStructCreate("ptr")
Local $aCall = DllCall($PSAPI, "int", "EnumProcessModules", "ptr", $hProcess, "ptr", DllStructGetPtr($Modules), "dword", DllStructGetSize($Modules), "dword*", 0)
If $aCall > 0 Then
Local $iModnum = $aCall / 4
Local $aTemp
For $i = 1 To $iModnum
$aTemp = DllCall($PSAPI, "dword", "GetModuleBaseNameW", "ptr", $hProcess, "ptr", Ptr(DllStructGetData($Modules, 1, $i)), "wstr", "", "dword", 260)
If $aTemp = $sModule Then
DllClose($PSAPI)
Return Ptr(DllStructGetData($Modules, 1, $i))
EndIf
Next
EndIf
DllClose($PSAPI)
Return SetError(-1, 0, 0)
EndFunc ;==>_MemoryModuleGetBaseAddress
Func _MemoryOpen($iv_Pid, $iv_DesiredAccess = 0x1F0FFF, $if_InheritHandle = 1)
If Not ProcessExists($iv_Pid) Then
SetError(1)
Return 0
EndIf
Local $ah_Handle =
If @error Then
SetError(2)
Return 0
EndIf
Local $av_OpenProcess = DllCall($ah_Handle, 'int', 'OpenProcess', 'int', $iv_DesiredAccess, 'int', $if_InheritHandle, 'int', $iv_Pid)
If @error Then
DllClose($ah_Handle)
SetError(3)
Return 0
EndIf
$ah_Handle = $av_OpenProcess
Return $ah_Handle
EndFunc ;==>_MemoryOpen
;=================================================================================================
Func _MemoryRead($iv_Address, $ah_Handle, $sv_Type = 'dword')
If Not IsArray($ah_Handle) Then
SetError(1)
Return 0
EndIf
Local $v_Buffer = DllStructCreate($sv_Type)
If @error Then
SetError(@error + 1)
Return 0
EndIf
DllCall($ah_Handle, 'int', 'ReadProcessMemory', 'int', $ah_Handle, 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
If Not @error Then
Local $v_Value = DllStructGetData($v_Buffer, 1)
Return $v_Value
Else
SetError(6)
Return 0
EndIf
EndFunc ;==>_MemoryRead
;=================================================================================================
Func _MemoryClose($ah_Handle)
If Not IsArray($ah_Handle) Then
SetError(1)
Return 0
EndIf
DllCall($ah_Handle, 'int', 'CloseHandle', 'int', $ah_Handle)
If Not @error Then
DllClose($ah_Handle)
Return 1
Else
DllClose($ah_Handle)
SetError(2)
Return 0
EndIf
EndFunc ;==>_MemoryClose
回复jericho0711
在同一个软件下是固定的,这是11.0.2的基址,在11.5.1中是ghost32.exe+3D0BA0 ...
zch11230 发表于 2016-3-28 16:08 http://www.autoitx.com/images/common/back.gif
原來如此,這樣小弟就了解了,那應該是我的ghost版本是11.5.x版...
純au取基址的例子,這幾天再找時間消化一下,好不容易這幾天才消化完大漠的方式...
不過有純au的方式,當然要學習一下純au的... 想问下 ghost32.exe+3D0BA0 CE如何获取后面的基址,如何计算的? 这个有什么用处呢??{:face (303):} zch11230 发表于 2016-3-25 16:30
凑合看看。获取模块基址用了大漠插件,求大神给个纯AU的方法。
感谢分享,收藏
页:
[1]