Página 1 de 1

Como pressionar SOMENTE a tecla ALT

Enviado: 05 Mar 2019 18:05
por clodoaldomonteiro
Olá amigos,

Uso o xHarbour 1.00 com GTWVW.

Tenho aqui uma questão interessante, que é, ao sair dos CRUDs, voltar o FOCO para o exato lugar onde estava no MENU Windows.
Como o ATL não pode ser acionado com o KEYBOARD, pois não tem código CHR Tabela ASCII, a única opção seria uma função em C.
Até consegui, mas ou fica pressionado, ou pressiona e solta logo que nem dá para perceber, mas não sei nada de "C".

Desde já agradeço a atenção.

PS. Cuidado, seu teclado pode ficar travado, pelo menos a tecla ALT.

Código: Selecionar todos

/////////////////////////////////////////////////////////////////
//Pressionar a tecla alt
#pragma BEGINDUMP
#include <windows.h>
HB_FUNC( _VK )
   {
   keybd_event (VK_MENU, 0x12, KEYEVENTF_EXTENDEDKEY | 0, 0 );
   keybd_event (VK_MENU, 0x12, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
   }
#pragma ENDDUMP

Como pressionar SOMENTE a tecla ALT (RESOLVIDO)

Enviado: 05 Mar 2019 18:16
por clodoaldomonteiro
Consegui,

Código: Selecionar todos

/////////////////////////////////////////////////////////////////
//Pressionar a tecla alt
#pragma BEGINDUMP
#include 
HB_FUNC( _VK )
   {
   keybd_event (VK_MENU, 0, 0, 0 );
   keybd_event (VK_MENU, 0, KEYEVENTF_KEYUP, 0);
   }
#pragma ENDDUMP
Só falta passar mais parâmetros para serem executados, para que o MENU navegue automaticamente.

Como pressionar SOMENTE a tecla ALT

Enviado: 05 Mar 2019 21:30
por fladimir
Não entendi a aplicabilidade do código.
Poderia explicar com mais detalhes ou exemplos?

Como pressionar SOMENTE a tecla ALT (Atualizado)

Enviado: 06 Mar 2019 04:58
por clodoaldomonteiro
Bom,
A intenção é quando o usuário fechar a janela aberta no MENU Windows, o sistema volte no MENU para exatamente onde ele estava, executando pra o usuários as teclas de acesso ao MENU até chegar na opção esperada e com isso, seu MENU Win vai ficar igual aos menus clipper.

Código: Selecionar todos

Function MAIN()
   .................................
   //na função MenuAction
   //Chamar as funções abaixo no final de cada Procedure de Tela de edução
   Cadastro()
   _VKALT()             //Pressiona o ALT
   _VKLETRA(0x54)  //Pressiona a tecla T
   _VKSETABAI(1)    //Pressiona seta pra baixo uma vez
   ..................................   

   Return .t.

#pragma BEGINDUMP
#include <windows.h>

   /////////////////////////////////////////////////////////////////
   //Pressionar a tecla alt
HB_FUNC( _VKALT )
   {
   keybd_event (VK_MENU, 0, 0, 0 );
   keybd_event (VK_MENU, 0, KEYEVENTF_KEYUP, 0);
   }

   /////////////////////////////////////////////////////////////////
   //Pressionar qualquer tecla
HB_FUNC( _VKLETRA )
   {
   keybd_event (hb_parnl(1), 0, 0, 0 );
   keybd_event (hb_parnl(1), 0, KEYEVENTF_KEYUP, 0);
   }

   /////////////////////////////////////////////////////////////////
   //Pressionar seta direita
HB_FUNC( _VKSETADIR )
   {
   keybd_event (VK_RIGHT, 0, 0, 0 );
   keybd_event (VK_RIGHT, 0, KEYEVENTF_KEYUP, 0);
   }

   /////////////////////////////////////////////////////////////////
   //Pressionar seta baixo
HB_FUNC( _VKSETABAI )
   {
   int n = 1;
   for(n = 1; n <= hb_parni(1); n++) {
      keybd_event (VK_DOWN, 0, 0, 0 );
      keybd_event (VK_DOWN, 0, KEYEVENTF_KEYUP, 0);
      }
   }
#pragma ENDDUMP
Tá meio tosco mas tá funcionando.

Links:
https://docs.microsoft.com/en-us/window ... eybd_event
https://docs.microsoft.com/pt-br/window ... -key-codes

Como pressionar SOMENTE a tecla ALT

Enviado: 06 Mar 2019 08:06
por fladimir
Entendi.

Obrigado por compartilhar e parabéns.

Como pressionar SOMENTE a tecla ALT

Enviado: 06 Mar 2019 09:03
por asimoes
Isso é pra que lib hmg, hmge ou hwgui?

Como pressionar SOMENTE a tecla ALT

Enviado: 06 Mar 2019 11:08
por clodoaldomonteiro
Como disse acima, estou usando o xHarbour 1.00 + GTWVW, para usar CONSOLE com MENU Win, e como a implementação é numa área BEGINDUMP, que vai criar uma função em C, e acho que pode ser usado em qualquer versão (x)Harbour.

O Quintas já usava algo assim para criar funções para o CTRL+C e CTRL+V e me deu uma ajuda.

Divirtam-se amigos.

Como pressionar SOMENTE a tecla ALT

Enviado: 06 Mar 2019 11:12
por microvolution
olá bom dia!
isto se aplica também no MENUBAR da GTWVG?
outra coisa:
eu já havia desabilitado o indesejável ALT+C no meu menu clipper (console), mas, ao usar o MENUBAR da GTWVG ele voltou sem pedir licença. Sr. autor do tópico ou demais, tem alguma ideia de como barrar novamente o ALT+C?

Como pressionar SOMENTE a tecla ALT

Enviado: 06 Mar 2019 14:43
por clodoaldomonteiro
Olá Microvolution
microvolution escreveu:olá bom dia!
isto se aplica também no MENUBAR da GTWVG?
outra coisa:
eu já havia desabilitado o indesejável ALT+C no meu menu clipper (console), mas, ao usar o MENUBAR da GTWVG ele voltou sem pedir licença. Sr. autor do tópico ou demais, tem alguma ideia de como barrar novamente o ALT+C?
Cada LIB gráfica tem suas particularidades.
Para desativa o ALT+C ainda estou usando o SetCancel(.f.) e assim, se o usuário fechar a tela principal no [X]Vermelho (canto superior direito), executa um ESC que posso desviar para uma Precedure que executo as rotinas de BKP e LOGS.

Uma dica, é procurar nos fontes da sua LIB algo relacionado com sua dúvida, ou pergunte para o José Quintas aqui do grupo, pois ele é Dr. em GTWVG.

Forte abraço.

Como pressionar SOMENTE a tecla ALT

Enviado: 07 Mar 2019 13:11
por microvolution
sim já uso o setcancel(.f.)
alguma coisa na criação do menubar wvg é que fez isso sumir. investiguei o que alterei no código e percebi que a retirada do inkey(0) (não necessário no menubar wvg) fez com que o pressionamento do ALT+C encerrasse o sistema. Então voltei com o inkey pro lugar (afinal não atrapalha em nada) e o ALT+C parou de incomodar.

Como pressionar SOMENTE a tecla ALT

Enviado: 11 Mar 2019 15:11
por syslink
andei estudano seu codigo mas vi q ele faz apenas e precionar a tecla alt depois seta pra direita e depois a letra t. no meu caso como tem uma opcao de meni q tem acionamento pela letra t o seu codigo so abre ele em qq jeito q mexer pensei q ele abria a ultima opcao anterior antes do clique do mouse talvez num futuro se conciga um codigo mais eficas valeu pela intecao.

Como pressionar SOMENTE a tecla ALT

Enviado: 11 Mar 2019 18:34
por clodoaldomonteiro
syslink escreveu:andei estudano seu codigo mas vi q ele faz apenas e precionar a tecla alt depois seta pra direita e depois a letra t. no meu caso como tem uma opcao de meni q tem acionamento pela letra t o seu codigo so abre ele em qq jeito q mexer pensei q ele abria a ultima opcao anterior antes do clique do mouse talvez num futuro se conciga um codigo mais eficas valeu pela intecao.
Para descer no MENU até a posição que vc quiser, basta colocar a função a seguir com o numero de vezes que a seta pra baixo de ser pressionada.

Código: Selecionar todos

_VKSETABAI(numeroVezes)    //Pressiona seta pra baixo uma vez