Fórum Validar programa aberto pelo nome do processo #596798
30/08/2018
0
Boa tarde pessoal, pessoal sou analista de sistemas, mais na área de desenvolvedor estou iniciando agora... preciso de ajuda em Delphi.
Quero validar um programa em aberto no Windows pelo nome do processo, exemplo ''''''''Google Chrome'''''''', ao abrir o Google Chrome ele abre alguns processos com esse
nome "Google Chrome"; quero exibir em uma mensagem se esta ou não aberto e quantos processos tem... eu fiz algo assim:
"function getProcesso(exeFileName: string): Boolean;
var
ContinueLoop : BOOL;
FSnapshotHandle : THandle;
FProcessEntry32 : TProcessEntry32;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
Result := false;
while Integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
begin
Result := True;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
function ContarGetProcesso(exeFileName: string): Integer;
var
ContinueLoop : BOOL;
FSnapshotHandle : THandle;
FProcessEntry32 : TProcessEntry32;
numVezes : Integer;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
numVezes :=0;
while Integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
begin
numVezes:=numVezes+1;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
Result := numVezes;
end;
procedure TForm1.Button1Click(Sender: TObject);
var programa, resultado : String;
begin
programa := ''''''''chrome.exe'''''''';
// programa := ''''''''Google Chrome'''''''';
if getProcesso(programa) then
begin
resultado := IntToStr(ContarGetProcesso(programa));
ShowMessage(''''''''O Processo ''''''''+programa+'''''''' está rodando! , tem '''''''' + resultado +'''''''' processos abertos'''''''');
end else
ShowMessage(''''''''O Processo ''''''''+programa+'''''''' não está rodando! '''''''');
end; "
OBS: Só funciona se eu explicitar o nome do .exe nome do aplicativo, não funciona pelo nome do processo. se alguém ai puder me ajudar. Obrigado.
Quero validar um programa em aberto no Windows pelo nome do processo, exemplo ''''''''Google Chrome'''''''', ao abrir o Google Chrome ele abre alguns processos com esse
nome "Google Chrome"; quero exibir em uma mensagem se esta ou não aberto e quantos processos tem... eu fiz algo assim:
"function getProcesso(exeFileName: string): Boolean;
var
ContinueLoop : BOOL;
FSnapshotHandle : THandle;
FProcessEntry32 : TProcessEntry32;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
Result := false;
while Integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
begin
Result := True;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
function ContarGetProcesso(exeFileName: string): Integer;
var
ContinueLoop : BOOL;
FSnapshotHandle : THandle;
FProcessEntry32 : TProcessEntry32;
numVezes : Integer;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
numVezes :=0;
while Integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
begin
numVezes:=numVezes+1;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
Result := numVezes;
end;
procedure TForm1.Button1Click(Sender: TObject);
var programa, resultado : String;
begin
programa := ''''''''chrome.exe'''''''';
// programa := ''''''''Google Chrome'''''''';
if getProcesso(programa) then
begin
resultado := IntToStr(ContarGetProcesso(programa));
ShowMessage(''''''''O Processo ''''''''+programa+'''''''' está rodando! , tem '''''''' + resultado +'''''''' processos abertos'''''''');
end else
ShowMessage(''''''''O Processo ''''''''+programa+'''''''' não está rodando! '''''''');
end; "
OBS: Só funciona se eu explicitar o nome do .exe nome do aplicativo, não funciona pelo nome do processo. se alguém ai puder me ajudar. Obrigado.
Carlos Vìêira
Curtir tópico
+ 0
Responder
Posts
03/09/2018
Fabricio Kawata
Fala Carlos. Só pra registrar minha experiência com esse tipo de função, aqui na empresa só conseguimos implementar com sucesso a verificação pelo nome do executável ou pelo nome da janela do programa. Pelo nome do processo, nunca conseguimos implementar algo funcional, tendo como base os exemplos encontrados na web.
Abraço!
Abraço!
Responder
Gostei + 0
08/09/2018
Carlos Vìêira
Boa tarde Fabrício, Obrigado por responder, eu não consegui pegar pelo nome da Janela, já tentei mais sem sucesso, tem alguma dica?
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)