Check these links (different approaches - pick your style):
EDIT: Regarding the last one, here is a reduced example, which is very easy to reproduce. In a brand new WinForms app, drop a timer on the form, set its Enabled = True in designer, and then paste the following into your form's code:
Public Class Form1
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Int32) _
As Short
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
If GetAsyncKeyState(Keys.F12) Then Me.WindowState = FormWindowState.Normal
End Sub
End Class
Start your app, minimize the form and press F12. This will bring your form up. You can focus on something else than VS, to confirm that it's working as expected. I tried with VS 2013 Premium RC and Google Chrome (where F12 brought up the form and also opened the dev tools).
Considering the amount of code, compared to other answers, this would be my favorite approach. For any disadvantages that experienced code gurus may find with it - please feel free to post as a comment.
Note: If you use a function signature from the link, you get a pinvoke stack imbalance.