Ir para conteúdo
Faça parte da equipe! (2024) ×
Conheça nossa Beta Zone! Novas áreas a caminho! ×
  • Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.

Ligando desligando Caps lock pelo delphi


lele2
 Compartilhar

Posts Recomendados

1 - Código Completo

 

Saber como ligar ou desligar o Caps Lock é uma técnica que pode ser muito útil durante o desenvolvimento de um projeto. Por exemplo, suponhamos que você queira que o usuário use somente letras maiúsculas durante o preechimento de alguns campos de um formulário. Você pode forçar o Caps Lock a ficar ligado durante todo o tempo que o formulário estiver ativo.

 

Neste tutorial eu mostrarei como fazer isso mas, com um diferencial. Você aprenderá passo-a-passo o que está sendo feito. Desta forma, você poderá modificar o código para melhor adaptá-lo às suas necessidades.

 

Vamos começar vendo o funcionamento do código. Coloque um botão em um formulário, dê duplo-clique no botão e insira o código abaixo em seu evento OnClick:

 

É necessário se cadastrar para acessar o conteúdo.

 

img187imageshackusimg18.png

 

Execute o aplicativo e clique no botão. Você verá que a cada clique no botão, a "luzinha" do Caps Lock é acesa ou apagada. Vamos ver como isso aconteceu?

 

img187imageshackusimg18.png

 

2 - Entendendo o tipo TKeyboardState

 

Logo no início do código nós definimos uma variável chamada KeyState do tipo TKeyboardState:

 

KeyState: TKeyboardState;

 

O tipo TKeyboardState está na unit Windows. Ao abrirmos o arquivo Windows.pas, (geralmente localizado em "C:\Arquivo de programas\Borland\Delphi#\Source\Rtl\Win\Windos.pas"), vemos que este tipo é definido como:

 

TKeyboardState = array[0..255] of Byte;

 

Ou seja, o tipo TKeyboardState não é nada mais que uma matriz unidimensional de 256 elementos do tipo Byte.

 

img187imageshackusimg18.png

 

3 - Entendendo a função GetKeyboardState

 

Logo após o begin temos uma chamada à função GetKeyboardState:

 

GetKeyboardState(KeyState);

 

Veja que está função recebe como argumento a variável KeyState declarada anteriormente. Ainda no arquivo Windows.pas encontramos o protótipo desta função:

 

function GetKeyboardState(var KeyState: TKeyboardState): BOOL; stdcall;

 

O protótipo nos indica que esta função pede uma variável do tipo TKeyboardState (que deverá ser passada por referência) e retorna um valor boolean. Na prática este valor nunca é testado. Mas você pode experimentar. Como você deve se lembrar, stdcall especifica que os parâmetros para a função serão passados da direita para a esquerda.

 

img187imageshackusimg18.png

 

Vejamos agora o corpo desta função. Rolamos o arquivo Window.pas um pouco e encontramos:

 

function GetKeyboardState; external user32 name 'GetKeyboardState';

 

Ah! Então esta função é uma chamada na API do Windows? Sim, isso mesmo. Hora de abrir os arquivos de ajuda da API do Windows e pesquisar a função GetKeyboardState. Encontramos:

 

É necessário se cadastrar para acessar o conteúdo.

 

img187imageshackusimg18.png

 

Embora este trecho de código esteja em C/C++, você não terá dificuldades em entender. Veja que a função recebe um ponteiro PBYTE para uma matriz contendo 256 elementos do tipo byte. O tipo de dados BOOL é identico ao boolean do Delphi.

 

O arquivo de ajuda nos diz que esta função copia o status das 256 teclas virtuais para o buffer especificado. Então, ao final da chamada:

 

É necessário se cadastrar para acessar o conteúdo.

 

img187imageshackusimg18.png

 

A variável KeyState (que é na verdade uma matriz unidimensional de 256 elementos do tipo Byte) conterá 256 elementos. Cada um destes elementos terá o valor 0 ou 1.

 

Muito bem! Tudo que temos que fazer agora é acessar o elemento da matriz que corresponde à tecla Caps Lock e verificar seu valor. Se o valor for 0, a tecla está desativada, do contrário ela está ativada. Olhando na tabela de códigos de teclas virtuais vemos que a constante VK_CAPITAL serve a este propósito. O valor inteiro desta constante é 20. Assim, o elemento da matriz correspondente a esta tecla pode ser acessado de duas formas:

 

É necessário se cadastrar para acessar o conteúdo.

 

Ou:

 

É necessário se cadastrar para acessar o conteúdo.

 

img187imageshackusimg18.png

 

Depois de testarmos se a tecla Caps Lock está ou não ativada, podemos prosseguir com nosso exemplo. Nossa intenção é ligar a tecla se ela estiver desligada e ligá-la se esta estiver desligada. Vamos ao próximo tópico.

 

Entendendo a função Keybd_Event

 

Agora que já sabemos como testar se a tecla Caps Lock está ativada ou desativada, chegou a hora de aprendermos como ligá-la ou desligá-la via código. Isso é feito por meio da função keybd_event.

 

Esta função permite simular o pressionamento de uma tecla. Isso quer dizer que você consegue simular os eventos OnKeyUP e OnKeyDown apenas usando esta função. Vamos investigá-la.

 

img187imageshackusimg18.png

 

O primeiro passo é consultar o Help do Delphi. Nada! Mais uns minutos de pesquisa e descobrimos que esta função está definida no arquivo Windows.pas. Eis o protótipo:

 

É necessário se cadastrar para acessar o conteúdo.

 

img187imageshackusimg18.png

 

Rolamos o arquivo Windows.pas um pouquinho mais e encontramos a definição:

 

É necessário se cadastrar para acessar o conteúdo.

 

img187imageshackusimg18.png

 

Hum! Outra chamada à API do Windows. Vamos aos arquivos da API então. Veja o que encontramos:

 

É necessário se cadastrar para acessar o conteúdo.

 

img187imageshackusimg18.png

 

Aqui vemos que a função não retorna nada (VOID). O primeiro parâmetro é código da tecla virtual a ser simulada. O segundo parâmetro não é usado, ou seja, em nosso exemplo fornecemos 1 apenas para indicar que a tecla seria ligada e 0 para indicar que a tecla seria desligada. O terceiro parâmetro são as opções da função. Os dois valores que podem ser fornecidos são KEYEVENTF_EXTENDEDKEY e KEYEVENTF_KEYUP. KEYEVENTF_KEYUP é usado para especificar o evento OnKeyUP. Se omitido, o evento será OnKeyDown. O quarto parâmetro pode ser definido como 0.

 

img187imageshackusimg18.png

 

Muito cuidado! Para simular o pressionamento de uma tecla é preciso chamar keybd_event duas vezes. Primeiro simulamos OnKeyDown e depois OnKeyUp. Assim, a tecla Caps Lock pode ser ligada ou desligada com o seguinte trecho de código:

 

É necessário se cadastrar para acessar o conteúdo.

 

img187imageshackusimg18.png

 

Veja que agora definimos o valor 0 para o segundo parâmetro. Isso não importa. Poderia ser 1 ou qualquer valor entre 0 e 255. Apenas estas duas linhas de código são suficientes para ligar ou desligar a tecla.

 

img187imageshackusimg18.png

 

Então escrevemos código em excesso? Na verdade não. Começamos com um código mais longo e um pouco repetitivo para mostrar-lhe os possíveis usos da função GetKeyboardState. Pode lhe ser útil algum dia.

 

Creditos:

 

Lele2

Osmar J. silva

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.