【发布时间】:2013-12-05 21:08:06
【问题描述】:
在 Delphi 6 中,我可以设置应用程序范围的消息处理程序:
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。
-
@David Heffernan:如何使
ProcessCmdKey处理WM_KEYUP? -
@Paul - 看看this;尤其是 Hans Passant 的回答。
-
@Brian - 打败我。这是正确的答案。
-
有人应该写一个答案
标签: c# winforms delphi handler windows-messages