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.