ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

[RESOLVIDO] - Bloquear Programa externo
Ir à página 1, 2, 3  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
FelipeArruda
Aprendiz
Aprendiz


Registrado: Sábado, 1 de Junho de 2013
Mensagens: 174

MensagemEnviada: Qua Set 28, 2016 7:19 am    Assunto: [RESOLVIDO] - Bloquear Programa externo Responder com Citação

Bom dia amigos, estou tendo um problema e nao estou achando uma real solução para o mesmo, e o seguinte:

Quero que assim que crie meu Formulario, automaticamente feche um programa externo. Ex: Clipp.exe

Ja tentei dessas formar e sem sucesso.

PostMessage(FindWindow(nil, 'Clipp'), WM_CLOSE, 0,0);
PostMessage(FindWindow(nil, 'Clipp.exe'), WM_CLOSE, 0,0);

O que estaria de errado????

Obrigado, tenham um bom dia


Editado pela última vez por FelipeArruda em Ter Out 04, 2016 9:07 am, num total de 2 vezes
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qua Set 28, 2016 8:45 am    Assunto: Responder com Citação

Se você procurar esse programa no gerenciador de tarefas, na aba processos, qual o nome que aparece na coluna descrição?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
FelipeArruda
Aprendiz
Aprendiz


Registrado: Sábado, 1 de Junho de 2013
Mensagens: 174

MensagemEnviada: Qua Set 28, 2016 8:57 am    Assunto: Responder com Citação

leo_cj escreveu:
Se você procurar esse programa no gerenciador de tarefas, na aba processos, qual o nome que aparece na coluna descrição?



Clipp.EXE
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qua Set 28, 2016 9:34 am    Assunto: Responder com Citação

Eu fiz assim aqui

Peguei um programinha de utilidades que uso aqui na empresa

NCu.exe

O caption da tela principal é : NC - Utilities

usei o código:
Código:

PostMessage(FindWindow(nil, 'NC - Utilities'), WM_CLOSE, 0,0);


ai funcionou
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
FelipeArruda
Aprendiz
Aprendiz


Registrado: Sábado, 1 de Junho de 2013
Mensagens: 174

MensagemEnviada: Qua Set 28, 2016 9:50 am    Assunto: Responder com Citação

O problema e que o mesmo possui um Splash.

Eu tentei fazer pelo nome do processo e vi que tem como fazer pela classe do programa, mas nao sei como olhar essa tal classe?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qua Set 28, 2016 10:05 am    Assunto: Responder com Citação

O 'NC - Utilities' não é o nome do processo, e sim o valor do caption do form

Se você tiver acesso ao fonte do programa, você consegue ver o nome da classe pelo código

no meu caso, minha classe está assim:
Código:

type
  TMainForm = class(TForm)


minha classe chama TMainForm e o código ficou assim
Código:

PostMessage(FindWindow('TMainForm', nil), WM_CLOSE, 0,0);


Para pegar o nome da classe, utilizei esse código:
Código:

procedure TForm1.Timer1Timer(Sender: TObject);
var
  H: HWND;
  ClassName: Array[0..255] of Char;
begin
  H := GetForegroundWindow;
  GetClassName(H, ClassName, SizeOf(ClassName));
  Memo1.Lines.Add('Classe-> '+ClassName);
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcieldeg
Colaborador
Colaborador


Registrado: Terça-Feira, 5 de Abril de 2011
Mensagens: 1054
Localização: Vitória - ES

MensagemEnviada: Qua Set 28, 2016 11:36 am    Assunto: Responder com Citação

Não use o FindWindow pra isso. É muito sujeito a falha. Localize o processo pelo nome do executável.

Use esse link como referência:
http://www.devmedia.com.br/forum/finalizar-processo-de-um-programa/256611
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
FelipeArruda
Aprendiz
Aprendiz


Registrado: Sábado, 1 de Junho de 2013
Mensagens: 174

MensagemEnviada: Qua Set 28, 2016 3:47 pm    Assunto: Responder com Citação

leo_cj - Boa Tarde, então, não tenho o código fonte do programa o qual quero finalizar.


marcieldeg - Boa Tarde, não entendi como utilizar esse código que citou[/quote]
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qua Set 28, 2016 3:56 pm    Assunto: Responder com Citação

FelipeArruda escreveu:
leo_cj - Boa Tarde, então, não tenho o código fonte do programa o qual quero finalizar.


marcieldeg - Boa Tarde, não entendi como utilizar esse código que citou
[/quote]

boa tarde,

no meu último comentário eu coloquei um jeito de descobrir a classe

Código:

procedure TForm1.Timer1Timer(Sender: TObject);
var
  H: HWND;
  ClassName: Array[0..255] of Char;
begin
  H := GetForegroundWindow;
  GetClassName(H, ClassName, SizeOf(ClassName));
  Memo1.Lines.Add('Classe-> '+ClassName);
end;


esse código vai pegar a classe da janela ativa e printar no memo1

porém, o que o amigo marcieldeg disse é fato, o FindWindow é muito sujeito a falhas.

para utilizar o código que ele sugeriu, você precisa passar o nome do executável desejado, exemplo:
Código:

killtask('Clipp.exe');
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
FelipeArruda
Aprendiz
Aprendiz


Registrado: Sábado, 1 de Junho de 2013
Mensagens: 174

MensagemEnviada: Qua Set 28, 2016 4:09 pm    Assunto: Responder com Citação

leo_cj escreveu:
FelipeArruda escreveu:
leo_cj - Boa Tarde, então, não tenho o código fonte do programa o qual quero finalizar.


marcieldeg - Boa Tarde, não entendi como utilizar esse código que citou


boa tarde,

no meu último comentário eu coloquei um jeito de descobrir a classe

Código:

procedure TForm1.Timer1Timer(Sender: TObject);
var
  H: HWND;
  ClassName: Array[0..255] of Char;
begin
  H := GetForegroundWindow;
  GetClassName(H, ClassName, SizeOf(ClassName));
  Memo1.Lines.Add('Classe-> '+ClassName);
end;


esse código vai pegar a classe da janela ativa e printar no memo1

porém, o que o amigo marcieldeg disse é fato, o FindWindow é muito sujeito a falhas.

para utilizar o código que ele sugeriu, você precisa passar o nome do executável desejado, exemplo:
Código:

killtask('Clipp.exe');
[/quote]

Certo descobri a classe TFormSenha

Entao seria isso?

PostMessage(FindWindow('TFormSenha', nil), WM_CLOSE, 0,0);

Quero que quando a pessoa execute o Clipp.exe seja finalizado caso essa aplicação que estou fazendo ja esteje rodando
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qua Set 28, 2016 4:12 pm    Assunto: Responder com Citação

seria isso

mas você quer que ao executar sua aplicação seja finalizado o processo do clipp.exe ou você quer que se sua aplicação estiver rodando não execute o clipp.exe?

se for a primeira, só esse código já basta, caso seja a segunda, você vai precisar usar um TTimer ou criar uma thread para ficar verificando se o processo existe e caso exista, finalizá-lo.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
FelipeArruda
Aprendiz
Aprendiz


Registrado: Sábado, 1 de Junho de 2013
Mensagens: 174

MensagemEnviada: Qua Set 28, 2016 4:17 pm    Assunto: Responder com Citação

leo_cj escreveu:
seria isso

mas você quer que ao executar sua aplicação seja finalizado o processo do clipp.exe ou você quer que se sua aplicação estiver rodando não execute o clipp.exe?

se for a primeira, só esse código já basta, caso seja a segunda, você vai precisar usar um TTimer ou criar uma thread para ficar verificando se o processo existe e caso exista, finalizá-lo.


seria essa segunda opção, como ficaria o código então?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qua Set 28, 2016 4:39 pm    Assunto: Responder com Citação

coloque esse código em um timer

Código:

var
Handle: THandle;
begin
Handle := FindWindow('TFormSenha ', nil);
if Handle <> 0 then begin
  PostMessage(Handle, WM_Close, 0, 0);
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
FelipeArruda
Aprendiz
Aprendiz


Registrado: Sábado, 1 de Junho de 2013
Mensagens: 174

MensagemEnviada: Qua Set 28, 2016 4:44 pm    Assunto: Responder com Citação

Nao funciona.

Código:
procedure TFRPrincipal.Timer1Timer(Sender: TObject);
var
Handle: THandle;
begin
Handle := FindWindow('TFormSenha ', nil);
if Handle <> 0 then begin
  PostMessage(Handle, WM_Close, 0, 0);
end;
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qua Set 28, 2016 4:59 pm    Assunto: Responder com Citação

o Timer está como enabled = true?

se sim, da algum erro ou não acontece nada?

se não acontece nada, quando abrir o programa que deve ser fechado, coloque um breakpoint no evento do timer e verifique o que está ocorrendo
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Ir à página 1, 2, 3  Próximo
Página 1 de 3

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB