找回密码
 加入
搜索
查看: 4251|回复: 12

AU3 内存处理的问题

[复制链接]
发表于 2008-7-3 20:57:18 | 显示全部楼层 |阅读模式
AU3 里面怎么没有写内存处理的 相关资料啊?
发表于 2008-7-3 21:07:22 | 显示全部楼层
是这个吗?
_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[0])
                DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0])
        Else
                Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
        EndIf

        Return $ai_Return[0]
EndFunc   ;==>_ReduceMemory
 楼主| 发表于 2008-7-3 21:25:15 | 显示全部楼层
这个是释放内存。。
涉及到写内存到指定的内存地址~~和锁定内存。。不知道有没有啊?
 楼主| 发表于 2008-7-4 23:58:42 | 显示全部楼层
顶下。。都沉底了。。~
发表于 2008-7-5 15:53:39 | 显示全部楼层
Func _MemoryOpen($iv_Pid, $iv_DesiredAccess = 0x1F0FFF, $if_InheritHandle = 1)
        If Not ProcessExists($iv_Pid) Then
                SetError(1)
                Return 0
        EndIf
        Local $ah_Handle[2] = [DllOpen('kernel32.dll')]
        If @error Then
                SetError(2)
                Return 0
        EndIf
        Local $av_OpenProcess = DllCall($ah_Handle[0], 'int', 'OpenProcess', 'int', $iv_DesiredAccess, 'int', $if_InheritHandle, 'int', $iv_Pid)
        If @error Then
                DllClose($ah_Handle[0])
                SetError(3)
                Return 0
        EndIf
        $ah_Handle[1] = $av_OpenProcess[0]
        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[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], '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[0], 'int', 'CloseHandle', 'int', $ah_Handle[1])
        If Not @error Then
                DllClose($ah_Handle[0])
                Return 1
        Else
                DllClose($ah_Handle[0])
                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[0], 'int', 'WriteProcessMemory', 'int', $ah_Handle[1], '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

评分

参与人数 1贡献 +2 收起 理由
lynfr8 + 2 精品文章

查看全部评分

发表于 2008-7-31 00:51:57 | 显示全部楼层
"0x" & Hex
这句好象不需要吧,
读内存后面的地址都已经是16进制的了。
不需要再转换。
我写脚本的时候把这个取消了,没有任何问题。
发表于 2008-8-1 04:50:33 | 显示全部楼层

回复 6# gaoyuan22 的帖子

另外请问一下知道的朋友:

"dword"  参数应该是读4字节(32BT)模式
"float"  应该是读浮点
还有
"ushort" 这个是不是 读取字符串模式?

另外,读取2字节(16BT)  以及 1字节(8BT) 模式应该是哪个参数呢?
还有其他一些参数模式 有哪些呢?

请教下我,先谢谢拉!
发表于 2008-10-26 19:39:44 | 显示全部楼层
嗯,好东西,顶起来
发表于 2009-7-21 22:57:12 | 显示全部楼层
学习下,顶起来让大家也分享下
发表于 2009-7-21 23:18:51 | 显示全部楼层
lynfr8  掘墓啦 快跑啊
发表于 2009-7-22 01:04:53 | 显示全部楼层
au3在内存处理方面也很强大,有专门的Memory.au3,没有相关资料是因为楼主没细心找吧..
发表于 2009-7-22 02:44:13 | 显示全部楼层
lynfr8  掘墓啦 快跑啊
sxd 发表于 2009-7-21 23:18


看着很多旧帖都没充分讨论就堆在角落可惜啊
反正有心情就趁天黑掘掘墓咯
大家有空都要试试
翻旧帖的感觉不错
发表于 2009-7-22 03:32:26 | 显示全部楼层
看着很多旧帖都没充分讨论就堆在角落可惜啊
反正有心情就趁天黑掘掘墓咯
大家有空都要试试
翻旧帖的感觉不错
lynfr8 发表于 2009-7-22 02:44


难得难得~~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-27 11:25 , Processed in 0.077489 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表