DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Dicas .NET - Criando atalhos de teclado para sua aplicação

Veja nessa dica, como criar teclas de atalhos para sua aplicação Windows Forms.

Criando atalhos de teclado para sua aplicação

Criar atalhos para funções da aplicação quando a aplicação está com o foco é tarefa simples.

O complicado é criar atalhos para a aplicação que funcionem quando a aplicação não está com o foco. Isso é possível através de uma função da API do sistema operacional : RegisterHotKey

Veja um exemplo de como funciona:

 

[DllImport("user32")]

public static extern int RegisterHotKey(IntPtr hwnd, int id, int fsModifiers, int vk);

[DllImport("user32.dll")]

static extern bool UnregisterHotKey(IntPtr hWnd, int id);

private const int MOD_ALT = 0x1;

private const int MOD_CONTROL = 0x2;

private const int MOD_SHIFT = 0x4;

private const int MOD_WIN = 0x8;

private const int WM_HOTKEY = 0x312;

 

public frmMain()

{

// Assigns the hotkey WIN+T

// 42 is (as always) a magic number

RegisterHotKey( this.Handle, 42, MOD_WIN, (int)Keys.T );

}

 

protected override void WndProc(ref Message m)

{

base.WndProc (ref m);

if( m.Msg == WM_HOTKEY )

{

if( !this.Visible )

this.Visible = true;

this.Activate();

}

}

 

private void frmMain_Closing(object sender, System.ComponentModel.CancelEventArgs e)

{

UnregisterHotKey( this.Handle, 42 );

}

 

Fazemos um DLLImport para que possamos fazer uso das funções register e unregisterHotkey.  No Load, chamamos o register, no closing o unregister.

Fazemos um override na função WndProc para recebermos e processarmos a mensagem de hotKey. Pronto. Nossa aplicação tem uma tecla de atalho registrada com o sistema operacional.





    3 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Roberto Rezende
Tomei este código como referência para um projeto mas agora não há mais necessidade de utilizar teclas de atalho quando o programa não estiver em foco. Existe alguma modificação que impeça este comportamento?

Obrigado.


em 6/1/2012 11:27 - Responder

 

  Luiz Agnelo C. Maia
Roberto, basta desregistrar o componente usando a linha:

UnregisterHotKey( this.Handle, 42 );

Mas para isto, ja que ainda o mantem aberto, vc tera que usar outro evento que não seja o close.
Talvez usando o deactive (http://msdn.microsoft.com/pt-br/library/system.windows.forms.form.deactivate.aspx) como no exemplo abaixo:

Private Sub Form1_Deactivate(sender as Object, e as EventArgs) _
Handles Form1.Deactivate

UnregisterHotKey( this.Handle, 42 );

End Sub

Espero ter ajudado.
[]s

Luiz Maia


em 9/1/2012 13:38 - Responder
 

  Roberto Rezende
Ajudou bastante sim!

Obrigado, e um abraço.


em 11/1/2012 10:19 - Responder
 



Publicidade
Autor
Tipster .net

Dicas sobre .NET




Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
0   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03