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 

Qual melhor maneira?

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
veHagah
Novato
Novato


Registrado: Quinta-Feira, 28 de Outubro de 2010
Mensagens: 5

MensagemEnviada: Qui Out 28, 2010 9:08 pm    Assunto: Qual melhor maneira? Responder com Citação

Olá.
Gostaria de saber qual a melhor maneira de resolver isso:

Tenho um jogo que roda em 800x600 modo janela.
Ao lado dele um simples form rodando com 10 botoes..

Ao clicar no botao, ele simula a digitação no jogo..
Exemplo, tem o botao chamado "Finalizar"..
Ao clicar, ele faz algo do tipo, setar á tela do jogo, dar um enter automático (para abrir o campo de digitacao do jogo) e digita /finalizar automaticamente...

Existe algum exemplo que poderia me basear?
Ou alguma ideia que poderiam me dar..

Agradeço desde ja.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fhcesar
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 25 de Outubro de 2010
Mensagens: 112

MensagemEnviada: Sex Out 29, 2010 1:57 pm    Assunto: Re: Qual melhor maneira? Responder com Citação

veHagah escreveu:
Olá.
Gostaria de saber qual a melhor maneira de resolver isso:

Tenho um jogo que roda em 800x600 modo janela.
Ao lado dele um simples form rodando com 10 botoes..

Ao clicar no botao, ele simula a digitação no jogo..
Exemplo, tem o botao chamado "Finalizar"..
Ao clicar, ele faz algo do tipo, setar á tela do jogo, dar um enter automático (para abrir o campo de digitacao do jogo) e digita /finalizar automaticamente...

Existe algum exemplo que poderia me basear?
Ou alguma ideia que poderiam me dar..

Agradeço desde ja.


O jogo é em Delphi ????
Tem um banco de dados.

Passa mais informação senão fica dificil ajudar.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
veHagah
Novato
Novato


Registrado: Quinta-Feira, 28 de Outubro de 2010
Mensagens: 5

MensagemEnviada: Sex Out 29, 2010 7:15 pm    Assunto: Responder com Citação

Obrigado pela resposta..

Não, o jogo não tem nada haver com o Delphi..
É um executável que a empresa disponibiliza..
Dai no jogo existem varios comandos.. Como qualquer um..

No caso eu queria criar uma telinha a parte que tivesse 10 botoes, que ao clicar, ele fizesse por mim o seguinte procedimento:

Setar o focu ao jogo, apertar enter (abrir tela de chat) e digitar algo que ficaria engessado no delphi e apertar enter novamente para enviar..

Seria um tipo de macro..
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Devwave
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 31 de Mai de 2010
Mensagens: 146

MensagemEnviada: Sex Out 29, 2010 10:24 pm    Assunto: Responder com Citação

Entendi Very Happy
Eu quis aprender Delphi para fazer isso hehe... Razz
Ta um exemplo (com o jogo Tibia):
Código:
var
  h: HWND;
  l: Integer;
  msg: String;
  a: Byte;
begin
  h := FindWindow(nil, 'Tibia'); //Acha a janela do Tibia
  msg := 'Sell Plate Armor (500 gps)';
  for l := 1 to Length(msg) do
  begin
    a := Byte(msg[l]);
    SendMessage(h, WM_CHAR, a, 0);
  end;
  SendMessage(h, WM_CHAR, 13, 0);
end;


Nesse código não foi preciso dar foco no jogo

Teh + Very Happy
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
veHagah
Novato
Novato


Registrado: Quinta-Feira, 28 de Outubro de 2010
Mensagens: 5

MensagemEnviada: Sex Out 29, 2010 10:30 pm    Assunto: Responder com Citação

Opaaaa, obrigadaaao ehm *-*

Vou dar uma testada, qualquer coisa posto aqui em caso de erro/duvida (:

Muiito obrigado meesmo Devwave!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
veHagah
Novato
Novato


Registrado: Quinta-Feira, 28 de Outubro de 2010
Mensagens: 5

MensagemEnviada: Sex Out 29, 2010 10:40 pm    Assunto: Responder com Citação

Uma dúvida..

SendMessage(h, WM_CHAR, a, 0);

0 = Simula tecla enter, correto?

Porque não posso utilizar assim:
SendMessage(0, h, WM_CHAR, a, 0);

pois preciso que ele de um ENTER antes de digitar, e um ENTER final para enviar..
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Devwave
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 31 de Mai de 2010
Mensagens: 146

MensagemEnviada: Sex Out 29, 2010 10:53 pm    Assunto: Responder com Citação

Citação:
Uma dúvida..

SendMessage(h, WM_CHAR, a, 0);

0 = Simula tecla enter, correto?

Porque não posso utilizar assim:
SendMessage(0, h, WM_CHAR, a, 0);

pois preciso que ele de um ENTER antes de digitar, e um ENTER final para enviar..


O 0 na verdade não é nada.
O a é a tecla que você vai digitar (Enter = 13, A = 65, B = 66...).
Fazendo "a := Byte(msg[l]);" você atribui ao "a" o valor da letra a ser digitada.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
veHagah
Novato
Novato


Registrado: Quinta-Feira, 28 de Outubro de 2010
Mensagens: 5

MensagemEnviada: Sex Out 29, 2010 11:15 pm    Assunto: Responder com Citação

Humm, obrigado..

Então não estaria correto fazer da seguinte forma:

Código:
var
  h: HWND;
  l: Integer;
  msg: String;
  a: Byte;
begin
  h := FindWindow(nil, 'Tibia'); //Acha a janela do Tibia
  msg := 'Sell Plate Armor (500 gps)';
  for l := 1 to Length(msg) do
  begin
    a := Byte(msg[l]);
    SendMessage(h, a, WM_CHAR, a, 0);
  end;
  SendMessage(h, 13, WM_CHAR, 13, 0);
end;


Ou seja..
Procura a janela "Tibia", dá o enter, digita a mensagem, da outro enter..
Isso que deveria de acontecer..

Mas tá dando um erro não identificado :S

O que poderia fazer?

Obrigadao pela força até agora (;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Devwave
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 31 de Mai de 2010
Mensagens: 146

MensagemEnviada: Sáb Out 30, 2010 7:23 am    Assunto: Responder com Citação

Ok, vou tentar explicar melhor:
Código:
var
  h: HWND;
  l: Integer;
  msg: String;
begin
  h := FindWindow(nil, ''); //Coloque o Caption da janela do seu jogo aqui
  SendMessage(h, WM_CHAR, 13, 0); //Dá um enter
  msg := ''; //Coloque a mensagem a ser digitada no jogo aqui
  for l := 1 to Length(msg) do
  begin
    SendMessage(h, WM_CHAR, Byte(msg[l]), 0); //Digita a mensagem no jogo (letra por letra)
  end;
  SendMessage(h, WM_CHAR, 13, 0); //Dá outro enter
end;


Espero que entenda agora Very Happy
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Sáb Out 30, 2010 7:40 am    Assunto: Responder com Citação

procure tb na net sobre a API keybd_event
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
Página 1 de 1

 
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