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.