love5173 发表于 2011-5-30 11:45:23

帮忙看下这个自定义函数是做什么的?有关数据结构![已解决]

本帖最后由 love5173 于 2011-5-31 10:08 编辑

在一次学习别人代码的时候,能看懂的部分修改成自己想要的代码命令了,这个我看不懂是做什么的,又不敢照搬所以问问谁知道这个是做什么的Func Mem()
      Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, _
      'int', False, 'int', @AutoItPID)
      Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle)
      DllCall("kernel32.dll" , 'int', 'CloseHandle', 'int', $ai_Handle)
EndFunc

easefull 发表于 2011-5-30 11:58:02

;一段C++的代码
      //获取进程句柄
      HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,ProcessInfo.th32ProcessID);
      if(hProcess)
      {
            SetProcessWorkingSetSize(hProcess,-1,-1);
            //内存整理
            EmptyWorkingSet(hProcess);
            CloseHandle(hProcess);
      }
根据以上注释和API解释,lz贴的代码应该是压缩自身进程内存用的.
原理可能是把不活动的物理内存数据 弄到 虚拟内存.

3mile 发表于 2011-5-30 13:07:18


Func Mem()
        #cs       
                OpenProcess(in DWORD dwDesiredAccess,in BOOL bInheritHandle,in DWORD dwProcessId);打开进程并获取进程的名称
                dwDesiredAccess是访问进程的权限。
                bInheritHandle是句柄是否继承进程属性。
                dwProcessId是进程ID。
        #ce
       
        Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', @AutoItPID)
        ;PROCESS_ALL_ACCESS = (0x1F0FFF)
       
        ;BOOL WINAPI EmptyWorkingSet(inHANDLE hProcess);强制释放没被使用的内存页面
        Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle)
        DllCall("kernel32.dll", 'int', 'CloseHandle', 'int', $ai_Handle);结束
EndFunc   ;==>Mem

love5173 发表于 2011-5-31 10:08:20

回复 3# 3mile
嗯,家里的技术员,说我的这个是修改网络指针的吓我一大跳,
起因是我在局域网安装了监控,但是总是出现网络被禁用的情况,这个函数我去掉以后还是有,后来把反复打开8899端口的函数关掉以后,情况就好转了。应该不是这个代码的问题

netegg 发表于 2011-5-31 10:18:45

清空工作集,释放进程的内存指针占用,不过据说是把内存转到页面文件
页: [1]
查看完整版本: 帮忙看下这个自定义函数是做什么的?有关数据结构![已解决]