Listando processos (ok) e extrair seu path (como extrair?)
Estou fazendo um ´mini´ gerenciador de processos personalizado, a idéia é de que ele controle todos os processos que estão rodando no pc. E eu gostaria de ter uma opção para ´levantar´ um processo e para isso seria necessário saber seu patch (caminho).
Eu utilizo esse código para listar os processos em um listbox:
E estou usando esse na opção de finalizar o processo (achei na internet...), acredito que nesse código ele já identifique o path, pois pra finalizá-lo ele deve utilizar o caminho do arquivo...
To no aguardo... ^^
Eu utilizo esse código para listar os processos em um listbox:
procedure ListaProcesso(List: TStrings); var ProcEntry: TProcessEntry32; Hnd: THandle; Fnd: Boolean; begin List.Clear; Hnd := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0); if Hnd <> -1 then begin ProcEntry.dwSize := SizeOf(TProcessEntry32); Fnd := Process32First(Hnd, ProcEntry); while Fnd do begin List.Add(ProcEntry.szExeFile); Fnd := Process32Next(Hnd, ProcEntry); end; CloseHandle(Hnd); end; end;
E estou usando esse na opção de finalizar o processo (achei na internet...), acredito que nesse código ele já identifique o path, pois pra finalizá-lo ele deve utilizar o caminho do arquivo...
function TerminateProcesso(sFile: string): Bool; var verSystem: TOSVersionInfo; hdlSnap,hdlProcess: THandle; bPath,bLoop: Bool; peEntry: TProcessEntry32; arrPid: array [0..1023] of DWord; iC: DWord; k,iCount: Integer; arrModul: array [0..299] of Char; hdlModul: HMODULE; begin result:=false; if ExtractFileName(sFile)=sFile then bPath:=false else bPath:=true; verSystem.dwOSVersionInfoSize:=SizeOf(TOSVersionInfo); GetVersionEx(verSystem); if verSystem.dwPlatformId=VER_PLATFORM_WIN32_WINDOWS then begin hdlSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); peEntry.dwSize:=Sizeof(peEntry); bLoop:=Process32First(hdlSnap,peEntry); while integer(bLoop)<>0 do begin if bPath then begin if CompareText(peEntry.szExeFile,sFile)=0 then begin TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,peEntry.th32ProcessID) ,0); result:=true; end; end else begin if CompareText(ExtractFileName(peEntry.szExeFile),sFile)=0 then begin TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,peEntry.th32ProcessID) ,0); result:=true; end; end; bLoop:=Process32Next(hdlSnap,peEntry); end; CloseHandle(hdlSnap); end else if verSystem.dwPlatformId=VER_PLATFORM_WIN32_NT then begin EnumProcesses(@arrPid,SizeOf(arrPid),iC); iCount:=iC div SizeOf(DWORD); for k:=0 to Pred(iCount) do begin hdlProcess:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,false,arrPid [k]); if (hdlProcess<>0) then begin EnumProcessModules(hdlProcess,@hdlModul,SizeOf(hdlModul),iC); GetModuleFilenameEx(hdlProcess,hdlModul,arrModul,SizeOf(arrModul)); if bPath then begin if CompareText(arrModul,sFile)=0 then begin TerminateProcess(OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,False,arrPid [k]), 0); result:=true; end; end else begin if CompareText(ExtractFileName(arrModul),sFile)=0 then begin TerminateProcess(OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,False,arrPid [k]), 0); result:=true; end; end; CloseHandle(hdlProcess); end; end; end; end;
To no aguardo... ^^
Madcat
Curtidas 0
Respostas
Madcat
16/06/2006
Não tem como editar msg aki no fórum?! ...
Só uma obs. eu estava tentando pegar o path(caminho) processo usando uma procedure de busca em todo o pc, só que podem ocorrer vários problemas desse jeito, como demora pra varrer tudo ´n´ (n° de processos) vezes, pode haver processos com o msm nome, porém aplicativos diferentes, dentre outros, ou seja, discartada a possibilidade de c usar uma procedure de busca no PC... vlw... té mais...
Só uma obs. eu estava tentando pegar o path(caminho) processo usando uma procedure de busca em todo o pc, só que podem ocorrer vários problemas desse jeito, como demora pra varrer tudo ´n´ (n° de processos) vezes, pode haver processos com o msm nome, porém aplicativos diferentes, dentre outros, ou seja, discartada a possibilidade de c usar uma procedure de busca no PC... vlw... té mais...
GOSTEI 0
Rodc
16/06/2006
Eu tinha um código que fazia isto, mas não tenho mais... mas já aviso que é possível sim.
Dá uma procurada pelo código aqui no forum e na net, talvêz você ache.
Dá uma procurada pelo código aqui no forum e na net, talvêz você ache.
GOSTEI 0
Madcat
16/06/2006
Já procurei muito e não achei, até postei em outro fórum tb muto conhecido e me falaram pra fazer a busca pelo HD... e mencionaram um tal de CreateProcess, mas não disseram como funciona isso... vou ver c acho algo sobre o createprocess, mas to aguardo aki hein :P quem puder me ajudar eu agradeço! flw... té mais
GOSTEI 0
Madcat
16/06/2006
To passando aki só pra avisar aos amigos que ainda não consegui achar o código que necessito T_T, to no aguardo de sugestões... vlw té mais...
GOSTEI 0