Ir para conteúdo
  • Cadastre-se

dev botao

Duvida relacionada a Delphi e instância de programa ativa


Ver Solução Respondido por EMBarbosa,
  • Este tópico foi criado há 1152 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Bom dia pessoal, esta dúvida não é sobre ACBR, mas sim sobre Delphi em geral. Fiz VARIAS pesquisas no StackOverflow e tudo mais, mas não achei uma coisa que definitivamente me ajudasse.

Meu problema é o seguinte. Nosso sistema tem telas Modal e telas que abrem como se fossem abas. <== (isto vai ser importante depois)

Foram definidas algumas teclas de atalhos com os comandos :

AtalhoBuscaID := GlobalAddAtom(PChar('HotKey1'));
RegisterHotKey(Handle, AtalhoBuscaID, MOD_CONTROL, VK_F3); // Atalho CTRL + F3

(claro que tem muito mais código no meio...)

e tudo funciona... até que ..... é aberta uma nova instância do sistema.

O que ocorre é o seguinte:

Tenho 2 ou 3 programas abertos. (3 instâncias do mesmo programa). 

Daí na instância 2 a pessoa executa o comando e "parece" que não acontece nada, mas o que ocorre é que o comando é executado só na primeira instância. Daí quando a pessoa olha... tá lá a janelinha aberta pelo comando esperando a pessoa interagir com ela. O engraçado é que mesmo o programa não estando no foco, o comando é executado nele. 

Saberiam me dizer como restringir esse hotkey apenas na instância que está ativa?

Já tentei usar o evento OnShortCut e parece funcionar até que abre uma tela modal ( Falei que ia ser importante esse detalhe 😉)

Agradeço a ajuda.

Postado

complementando o esquema ali de cima... coloquei um showmessage ao executar o atalho que mostra o "handle" e também no create do programa. 

Daí observei o seguinte : ao executar o programa... o showmessage mostra '18995' (que corresponde ao handle da instância do programa)

daí executo mais uma instância, e o showmessage mostra "54555"   (que corresponde ao handle da instância do programa)

mas... mesmo com o foco na instância do 54555 quem recebe a ação do atalho é o handle 18995.

(obviamente os números que coloquei aqui são meramente ilustrativos)

  • 1 mês depois ...
  • Consultores
Postado
Em 11/08/2021 at 10:01, Fernando Massa disse:

RegisterHotKey(Handle, AtalhoBuscaID, MOD_CONTROL, VK_F3); // Atalho CTRL + F3

Esse comando é um comando do sistema. Quer dizer que é como se você estivesse adicionando atalho no WIndows, não na sua aplicação. Por isso apenas uma aplicação pode adicionar o mesmo atalho por vez.

Em 11/08/2021 at 10:01, Fernando Massa disse:

Daí na instância 2 a pessoa executa o comando e "parece" que não acontece nada, mas o que ocorre é que o comando é executado só na primeira instância. Daí quando a pessoa olha... tá lá a janelinha aberta pelo comando esperando a pessoa interagir com ela. O engraçado é que mesmo o programa não estando no foco, o comando é executado nele. 

Na verdade, como a documentação sobre a função explica, e se você debugar conseguirá ver, a chamada feita na segunda instância falha nessa função.

Veja:

var
  Registrou: Boolean;
 (...)
begin
  (...)
  Registrou := RegisterHotKey(Handle, AtalhoBuscaID, MOD_CONTROL, VK_F3); // Atalho CTRL + F3
  (...) // inspecione aqui o valor de "Registrou" na segunda instância...

 

Em 11/08/2021 at 10:01, Fernando Massa disse:

Já tentei usar o evento OnShortCut e parece funcionar até que abre uma tela modal ( Falei que ia ser importante esse detalhe 😉)

Esse tipo de atalho não é do sistema... por isso funciona para cada instância. Por outro lado, sua tela modal não deve estar tratando o atalho, e por isso não funciona...

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Consultores
  • Solution
Postado

Possivelmente, você precisa da função SetWindowsHook, mas não tenho certeza.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Este tópico foi criado há 1152 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.