我想在delphi程序中,获得指定内存进程的内存占用大小,进程建立的用户名等相关信息,如何实现呢
如比指定smss.exe,就得到他的内存占用,
就像任务管理器里面一样可以显示出进程占用的内存大小,最好是连CPU的占用率也能得到.谢谢

解决方案 »

  1.   

    uses Psapi
    function GetProcessMemorySize(_sProcessName: string; var _nMemSize: Cardinal): Boolean;
    var
    l_nWndHandle, l_nProcID, l_nTmpHandle: HWND;
    l_pPMC: PPROCESS_MEMORY_COUNTERS;
    l_pPMCSize: Cardinal;
    begin
    l_nWndHandle := FindWindow(nil, PChar(_sProcessName));if l_nWndHandle = 0 then 
    begin
        Result := False;
        Exit;
    end;l_pPMCSize := SizeOf(PROCESS_MEMORY_COUNTERS);GetMem(l_pPMC, l_pPMCSize);
    l_pPMC^.cb := l_pPMCSize;GetWindowThreadProcessId(l_nWndHandle, @l_nProcID);
    l_nTmpHandle := OpenProcess(PROCESS_ALL_ACCESS, False, l_nProcID);if (GetProcessMemoryInfo(l_nTmpHandle, l_pPMC, l_pPMCSize)) then
        _nMemSize := l_pPMC^.WorkingSetSize
    else
        _nMemSize := 0;FreeMem(l_pPMC);Result := True;
    end;//Beispielprocedure TForm1.Button1Click(Sender: TObject);
    var
    l_nSize: Cardinal;
    begin
    if (GetProcessMemorySize('Unbenannt - Editor', l_nSize)) then
        ShowMessage('Size: ' + IntToStr(l_nSize) + ' byte')
    else
        ShowMessage('Error');
    end;