AU3 内存处理的问题
AU3 里面怎么没有写内存处理的 相关资料啊? 是这个吗?_ReduceMemory(@AutoItPID)
Func _ReduceMemory($i_PID = -1)
If $i_PID <> -1 Then
Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle)
DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle)
Else
Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
EndIf
Return $ai_Return
EndFunc ;==>_ReduceMemory 这个是释放内存。。
涉及到写内存到指定的内存地址~~和锁定内存。。不知道有没有啊? 顶下。。都沉底了。。~:face (13): 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
Func _MemoryWrite($iv_Address, $ah_Handle, $v_Data, $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
Else
DllStructSetData($v_Buffer, 1, $v_Data)
If @error Then
SetError(6)
Return 0
EndIf
EndIf
DllCall($ah_Handle, 'int', 'WriteProcessMemory', 'int', $ah_Handle, 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
If Not @error Then
Return 1
Else
SetError(7)
Return 0
EndIf
EndFunc ;==>_MemoryWrite
例子:
读取内存值:
$Base=0x0040000
$MEM = _MemoryRead("0x" & Hex($Base + 0x274), $Handle,"dowrd")
表示以dword类型读取40000+偏移274的内存值
$MEM=_MemoryWrite("0x" & Hex($Base + 0x250), $Handle,"123456","dowrd")
表示以dword类型写入40000+偏移250的内存值为123456 "0x" & Hex
这句好象不需要吧,
读内存后面的地址都已经是16进制的了。
不需要再转换。
我写脚本的时候把这个取消了,没有任何问题。
回复 6# gaoyuan22 的帖子
另外请问一下知道的朋友:"dword"参数应该是读4字节(32BT)模式
"float"应该是读浮点
还有
"ushort" 这个是不是 读取字符串模式?
另外,读取2字节(16BT)以及 1字节(8BT) 模式应该是哪个参数呢?
还有其他一些参数模式 有哪些呢?
请教下我,先谢谢拉! 嗯,好东西,顶起来 学习下,顶起来让大家也分享下 lynfr8掘墓啦 快跑啊 au3在内存处理方面也很强大,有专门的Memory.au3,没有相关资料是因为楼主没细心找吧.. lynfr8掘墓啦 快跑啊
sxd 发表于 2009-7-21 23:18 http://www.autoitx.com/images/common/back.gif
看着很多旧帖都没充分讨论就堆在角落可惜啊
反正有心情就趁天黑掘掘墓咯
大家有空都要试试
翻旧帖的感觉不错
看着很多旧帖都没充分讨论就堆在角落可惜啊
反正有心情就趁天黑掘掘墓咯
大家有空都要试试
翻旧帖的感觉不错
lynfr8 发表于 2009-7-22 02:44 http://www.autoitx.com/images/common/back.gif
难得难得~~
页:
[1]