Esse artigo faz parte da revista Clube Delphi edição 27. Clique aqui para ler todos os artigos desta edição



Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML.

A face oculta das APIs

Revele senhas usando a API do Windows 

Recentemente me senti desafiado por programas não gratuitos que encontrei na internet cuja única finalidade era revelar senhas ocultas por asteriscos ou outro caractere. Apesar destes aplicativos serem largamente difundidos e conhecidos na internet, o mesmo não acontece com suas rotinas e códigos fontes. Sendo assim, decidi implementar meu próprio aplicativo com a mesma finalidade.

Após um pouco de pesquisa e algumas horas de programação, cheguei finalmente a uma solução: utilizando a API do Windows, geramos um programa pequeno e fácil de se transportar, tal qual aqueles vendidos por aí!

Implementação

A implementação do programa em si é simples. O único problema é saber qual função da API do Windows utilizar para executar nossa tarefa. De forma geral, espera-se que o aplicativo final funcione da seguinte maneira: ao mover o cursor, o componente TTimer deve detectar que o mouse está sobre uma caixa de diálogo contendo uma senha oculta, extraí-la e enviá-la para o componente TEdit, que torna a senha visível ao usuário.

Comece adicionando a um novo projeto do Delphi, um componente TTimer e um TEdit. Altere a propriedade Interval do TTimer para 1, indicando que o evento OnTimer será disparado a cada milissegundo; altere a propriedade Enabled  para False. No evento OnShow do formulário principal, adicione:

 

procedure Tform1.Form1OnShow (Sender: Tobject);

begin

 Timer1.enabled := True;

end;

 

E no evento OnTimer do TTimer:

 

// Identifica e mostrar a senha oculta

procedure TForm1.Timer1Timer (Sender: TObject);

var

 // Recebe a posição do cursor do mouse

 Pos: TPoint;

 // Recebe a senha oculta

 Paswd: array[0..63] of char;

 Hwin: Thandle;            

begin

 //Obtém a posição do cursor

 GetCursorPos(Pos);

 //Pega o Handle da janela sobre

 // a qual o cursor está localizado

 HWin := WindowFromPoint(Pos);

 //Verifica se há senha oculta

 if SendMessage(HWin, EM_GETPASSWORDCHAR, 0, 0) <> 0 then

  ...

Quer ler esse conteúdo completo? Tenha acesso completo