Вы можете переопределить метод ProcessCmdKey () формы, он запускается до того, как любой элемент управления в форме увидит нажатие клавиши.Если вам действительно нужно, чтобы это было на уровне приложения (все формы), тогда ваша основная форма должна реализовывать интерфейс IMessageFilter.Например:
public partial class Form1 : Form, IMessageFilter {
public Form1() {
InitializeComponent();
Application.AddMessageFilter(this);
this.FormClosed += (o, e) => Application.RemoveMessageFilter(this);
}
public bool PreFilterMessage(ref Message m) {
// Catch WM_KEYDOWN message
if (m.Msg == 0x100 && (Keys)m.WParam == Keys.F1) {
MessageBox.Show("Help me!");
return true;
}
return false;
}
}