Q:

Capturar pressionamento de uma tecla em segundo plano

Olá, gostaria de fazer com que minha aplicação detectasse quando uma determinada tecla é pressionada, porém em segundo plano, ou seja, não haverá nenhum formulário em exibição.
Consigo fazer a detecção das teclas no formulário com o código (Ctrl+L):
   If e.Control AndAlso e.KeyCode = Keys.L Then
       MessageBox.Show("Teste")
   End If

Obrigado.

A:

Podemos usar a função GetAsyncKeyState() do C++ como o @viniciusafx mencionou no comentário da sua pergunta, para isso, vamos criar uma referência para ela.
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer

Agora vamos criar o verificador para quando essa tecla está pressionada ou não, para isso vamos criar um Timer com intervalo para 25ms (quanto menor o intervalo, melhor, porém poderá consumir mais processador na execução. Quanto maior o intervalo, por mais tempo o usuário deverá pressionar a tecla para chamar a ação).
Private WithEvents Timer1 As New Timer With {
     .Interval = 25,  ' 25 ms
     .Enabled  = True ' ativa o timer
}

Agora vamos criar o código para o evento Tick:
Private Sub Timer1_Click() Handles Timer1.Tick
    ...
End Sub

Agora, dentro do método acima, vamos declarar três booleanas, uma para distinguir se a tecla Ctrl está sendo pressionada, outra para ver se a tecla Shift é pressionada, e então, outra para saber se a tecla que quer que seja pressionada esteja sendo pressionada:
Private ctrlKey As Boolean  = GetAsyncKeyState(Keys.ControlKey)
Private shiftKey As Boolean = GetAsyncKeyState(Keys.Shiftkey)
Private theKey As Boolean   = GetAsyncKeyState(Keys.K)

No código abaixo, irá detectar a combinação Ctrl + Shift + K:
If ctrlKey = True And shiftKey = True And theKey = True Then
     ' código aqui...
End If

Se quiser numa opção mais rápida, para a combinação Ctrl + X:
If ctrlKey = True And (GetAsyncKeyState(Keys.X) = True) Then
     ' pressionou Ctrl + X
End If

Fonte do código: http://www.dreamincode.net/forums/topic/94406-global-hotkey/

