Exemplo de implementação Delphi para obtenção de lista de processos e informações relacionadas
Prefácio:
Não tenho nada para fazer. É divertido olhar o gerenciador de tarefas. Verifiquei as informações e as implementei brevemente. Não há código para obter o uso da CPU. maneira de escrever, então não vou escrever aqui. Continuaremos a melhorá-lo no futuro, mas as informações sobre o Processo do Sistema e o Sistema ainda não podem ser obtidas. Se alguém souber, posso lembrar.
O código é o seguinte
interface principal da unidade usa Windows, Mensagens, SysUtils, Variantes, Classes, Gráficos, Controles, Formulários, Diálogos, TlHelp32, StdCtrls, ComCtrls,psAPI; tipo PTokenUser = _TOKEN_USER = registro Usuário: TSIDAndAttributes; TForm1= class(TForm) btn_Get: TButton; TListView; procedimento btn_GetClick(Sender: TObject); procedimento FormCreate(Sender: TObject) função GetMemUsedText(memsize:Cardinal):string; :função de string; GetCupUsedPercent(hprocess:THandle):string function GetProcessUser(hprocess:THandle):string; public { Declarações públicas } end var Form1: TForm1; use o Vista Para ler as informações do sistema no Win7, você precisa executá-lo como administrador} função PromoteProcessPrivilege(Processhandle:Thandle;Token_Name:pchar):boolean; var TokenPri:_TOKEN_PRIVILEGES; começar //Observe o valor do privilégio das permissões do sistema se LookupPrivilegeValue(nil,Token_Name,Luid) então comece TokenPri.PrivilegeCount:=1;Attributes:=SE_PRIVILEGE_ENABLED; Luid; i:=0; //Elevar direitos se AdjustTokenPrivileges(Token,false,TokenPri,sizeof(TokenPri),nil,i) then Resultado:=true end; CloseHandle(Token end function); : TSystemTime; começar FileTimeToSystemTime(KernelTime, SysTimeK); FileTimeToSystemTime(UserTime, SysTimeU); Resultado :=SystemTimeToDateTime(SysTimeK)+SystemTimeToDateTime(SysTimeU end; //Obter função de tempo de CPU GetProcCPUTime(procID:THandle): var CreationTime, ExitTime, KernelTime, UserTime: TFileTime; (procID, CreationTime, ExitTime, KernelTime,UserTime); Resultado := AddFileTimes(KernelTime, UserTime); fim do procedimento TForm1.btn_GetClick(Sender: TObject); Informações de memória pPMC:PPROCESS_MEMORY_COUNTERS; pPMCSize,ProcessPriority:Cardinal; n:DWORD; fName:array [0..MAX_PATH-1] of char; Begin //Cria um instantâneo do processo hSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); ; //O primeiro processo encontra := Process32First(hSnapShot,pEntry); while find do start item := Lv_Process.Items.Add; //Nome do processo item.Caption := pEntry.szExeFile; //ID do processo item.SubItems.Add(IntToStr(pEntry.th32ProcessID)); ); pPMCSize; //Abra o processo e aumente a permissão PROCESS_VM_READ para que hProcess possa ser usado para obter o caminho completo posteriormente:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,pEntry.th32ProcessID); //Obter informações de memória if GetProcessMemoryInfo(hProcess,pPMC); ,pPMCSize) então comece //Obter o usuário do processo item.SubItems.Add(GetProcessUser(hProcess)); //Uso de memória item.SubItems.Add(GetMemUsedText(pPMC.WorkingSetSize)); //Pico de memória item.SubItems.Add(GetMemUsedText( pPMC.PicoWorkingSetSize)); //Tempo de CPU item.SubItems.Add(FormatDateTime('hh:mm:ss',GetProcCPUTime(hProcess))); //Obter prioridade ProcessPriority := GetPriorityClass(hProcess); ; //Encontrar o identificador do módulo de acordo com o identificador do processo ENumProcessModules(hProcess,@hModel,SizeOf(hModel),n //Obter o caminho completo GetModuleFileNameEx(hProcess,hModel,fName,Length(fName)); Adicionar(fNome); fim FreeMem(pPMC); Process32Next (hSnapShot, pEntry); função final TForm1.GetCupUsedPercent (hprocess: THandle): string; início da função TForm1.GetMemUsedText (memsize: Cardinal): string; K';função final; TForm1.GetProcessPriority (prioridade: Cardinal): string; início da prioridade do caso de IDLE_PRIORITY_CLASS: Resultado: = 'baixo'; Resultado: = 'normal'; hora'; fim; //Obter o usuário da função de processo TForm1.GetProcessUser(hprocess: THandle): string; var hToken:THandle: array de Char: SID_NAME_USE; //Abra permissões se não OpenProcessToken(hprocess,TOKEN_QUERY,hToken) then Exit; //Obter informações do token, o terceiro parâmetro aqui usa nil, que primeiro retorna o tamanho real dwSize e depois aloca memória de acordo com esse tamanho GetTokenInformation(hToken,TokenUser,nil,0 , dwSize); pUser := nil; //Alocar espaço ReallocMem(pUser,dwSize); := 0; dwDomainSize := 0; //Obter informações se não for GetTokenInformation(hToken,TokenUser,pUser,dwSize,dwSize) então Sair; //Para encontrar informações do usuário, primeiro retorne o nome do usuário e o tamanho do nome de domínio. Claro, você também pode obter tudo de uma vez, ou seja, sem usar o array dinâmico LookupAccountSid(nil,pUser.User.Sid,nil,dwUserSize. ,nil,dwDomainSize,peUse); if (dwUserSize <> 0) e (dwDomainSize <> 0) então comece //Alocar comprimento SetLength(szUserName,dwUserSize); SetLength(szDomainName,dwDomainSize); //Novamente, obtenha o nome de usuário e nome de domínioLookupAccountSid(nil,pUser.User.Sid,PChar(szUserName),dwUserSize,PChar(szDomainName), dwDomainSize, peUse); fim; PChar(szUserName)+'/'+PChar(szDomainName); CloseHandle(hToken(pUser); procedimento TForm1.FormCreate(Sender: TObject);
Executar imagem
Se você tiver alguma dúvida, deixe uma mensagem ou vá até a comunidade deste site para se comunicar e discutir. Obrigado pela leitura, espero que possa ajudar a todos.