В Delphi 6 я мог бы установить обработчик сообщений приложения широко:Применение в масштабе обработчика сообщений в приложении # WinForms C
procedure TFrmMain.TntFormShow(Sender: TObject);
begin
Application.OnMessage:=AppMsgHandler;
end;
procedure TFrmMain.AppMsgHandler(var Msg:TMsg; var Handled:Boolean);
begin
if Msg.message=WM_KEYDOWN then begin
..............
end;
if Msg.message=WM_KEYUP then begin
..............
end;
end;
Этот обработчик делает возможным обработку событий клавиатуры независимо, которые контролируют или даже в какой форме заявки активен. Обратите внимание, что это не глобальный системный крючок для всей системы, и поэтому он не так опасен.
Теперь вопрос: как может быть сделано то же самое в приложении C# WinForms?
Я мог бы переопределить WndProc
формы, но это решение не ложится на события keydown и keyup.
Я мог бы также переопределить ProcessCmdKey
формы, но не поймал WM_KEYUP
.
Также оба решения применяются только к одному классу форм, и мне нужно решение для всего приложения.
Эта информация должна быть в вопросе и тегах. WPF будет отличаться. Как я уже сказал, я думаю, что для вас это ProcessCmdKey. –
@ Давид Хеффернан: как сделать обработчик 'ProcessCmdKey'' WM_KEYUP'? – Paul
@Paul - взгляните на [это] (http://stackoverflow.com/questions/2434834/processcmdkey-wait-for-keyup); в частности, ответ от Hans Passant. – Brian