Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Uso da API GetAsyncKeyState


Danleonhart

Pergunta

Pessoal...

Alguém já usou a API "GetAsyncKeyState" :mellow: ?

Estou a fazer uns testes para configurar minha aplicação para que mesmo minimizada ou oculta ao teclar determinada tecla seja trazida a aplicação para primeiro plano.

Mas testando esta API ela só está retornando "1" e "0" ... :wacko:

Se fosse com o "Foco" na aplicação, não precisaria da API...pois com um "Select Case KeyAscii" no evento KeyPress do Form funcionou de boa...mas com a aplicação minimizada ou então oculta não rola <_<

Editado por Danleonhart
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

A API não retorna a lista de teclas pressionadas, e sim se determinada tecla está pressionada. Dessa forma, você tem que passar um parâmetro com o número da tecla (se retornar 1, está pressionada; se retornar 0, não está).

Para verificar quais teclas estão pressionadas é necessário fazer um loop chamando a função várias vezes.

Link para o comentário
Compartilhar em outros sites

  • 0

Tente fazer o loop apenas com os caracteres de a~z pra testar (65 a 90)

Dim N As Integer
For N = 65 To 90
If GetAsyncKeyState(N) Then
MsgBox Chr(N)
Exit For
End If
Next

Não tenho mais o VB instalado aqui, mas testei um código equivalente em C++ e funcionou normalmente.

Provavelmente o que aconteceu no seu caso é o seguinte: como está verificando todos os valores da tabela ASCII, a função retorna true para alguns caracteres sem relevância. Quando isso ocorre, uma mensagem é mostrada e você pára de apertar o botão que estava apertando para clicar em "Ok". Como a função trabalha com o caractere no instante em que é chamada, acaba não funcionando como esperado (isto é, não somente mostra os caracteres irrelevantes, como acaba por não mostrar os relevantes também).

Link para o comentário
Compartilhar em outros sites

  • 0

esses são considerados caracteres especiais.

aqui, o "ç" deu 186 e o "´" deu 219 (você pega o acento separado da letra).

descobri com esse codigo dentro dum timer:

For i = 128 To 255
    If GetAsyncKeyState(i) Then
        Debug.Print i
    End If
Next[/code]

digite o caractere especial q você quiser, q deve aparecer ai.

acontece tb q esse caracteres dependem do locale do sistema operacional (linguagem setada nas configuracoes).

esses caracteres não existem na tabela ascii padrão (q vai do caracter 0 ao 127). na tabela utilizada por sistemas em portugues, o ç, por exemplo, encontra-se entre os caracteres 128 e 255 ("Ç" é o caracter 199 e "ç" é o 231), q são caracteres q variam de acordo com a regiao.

ou seja, são caracteres especiais, não existem constantes especificas pra eles na lista de virtual keys (http://msdn.microsoft.com/en-us/library/dd...v=vs.85%29.aspx) utilizada pelo GetAsyncKeyState().

resumindo, imagino q isso deva variar de acordo com as configuracoes de idioma do teclado no sistema do usuario.

mas a principio, pra pegar os caracteres usados no teclado brasileiro, você pode usar o metodo q passei pra descobrir o codigo dos caracteres especiais.

ou tente utilizar a api MapVirtualKey() ou a MapVirtualKeyEx() em conjunto com a LoadKeyboardLayout() q imagino q sirvam pra isso.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...