slsabc 发表于 2008-7-3 20:57:18

AU3 内存处理的问题

AU3 里面怎么没有写内存处理的 相关资料啊?

renren 发表于 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)
                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

slsabc 发表于 2008-7-3 21:25:15

这个是释放内存。。
涉及到写内存到指定的内存地址~~和锁定内存。。不知道有没有啊?

slsabc 发表于 2008-7-4 23:58:42

顶下。。都沉底了。。~:face (13):

my788521 发表于 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 =
        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

gaoyuan22 发表于 2008-7-31 00:51:57

"0x" & Hex
这句好象不需要吧,
读内存后面的地址都已经是16进制的了。
不需要再转换。
我写脚本的时候把这个取消了,没有任何问题。

gaoyuan22 发表于 2008-8-1 04:50:33

回复 6# gaoyuan22 的帖子

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

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

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

请教下我,先谢谢拉!

superflq 发表于 2008-10-26 19:39:44

嗯,好东西,顶起来

lynfr8 发表于 2009-7-21 22:57:12

学习下,顶起来让大家也分享下

sxd 发表于 2009-7-21 23:18:51

lynfr8掘墓啦 快跑啊

pusofalse 发表于 2009-7-22 01:04:53

au3在内存处理方面也很强大,有专门的Memory.au3,没有相关资料是因为楼主没细心找吧..

lynfr8 发表于 2009-7-22 02:44:13

lynfr8掘墓啦 快跑啊
sxd 发表于 2009-7-21 23:18 http://www.autoitx.com/images/common/back.gif

看着很多旧帖都没充分讨论就堆在角落可惜啊
反正有心情就趁天黑掘掘墓咯
大家有空都要试试
翻旧帖的感觉不错

afan 发表于 2009-7-22 03:32:26



看着很多旧帖都没充分讨论就堆在角落可惜啊
反正有心情就趁天黑掘掘墓咯
大家有空都要试试
翻旧帖的感觉不错
lynfr8 发表于 2009-7-22 02:44 http://www.autoitx.com/images/common/back.gif

难得难得~~
页: [1]
查看完整版本: AU3 内存处理的问题