看到这个问题后首先想到是直接添加一个事件处理就行了,在C#中,有关按键处理的主要事件有KeyDown,KeyUp,KeyPress三种。那
么"Press&Hold" back键会激活哪个事件的响应呢?none, 这三个事件统统不激活。短按back key的确能激活KeyPress事件,但是
长按完全不可以,所以最初的设想失败了。
试着添加自定义事件,最终也是失败了(C#好像不能添加自定义事件,有这方面的高手请教教我)。无奈之中尝试用spy监听程序
窗口消息,发现“Press&Hold”还是有叫WM_HotKey的消息持续不断的发过来的,只能说明当初封装C#的人没有考虑到这个消息的处
理,没有把它打包成事件(严重鄙视他)。
那么就得考虑添加窗口对消息的处理了。
如果是用C++的话这个就很容易完成,在mainProc里面加个处理就行了。但是C#..mainProc在哪里?我们的主窗口类是继承的
System.Windows.Forms类,网上有同仁说可以直接覆盖父类的WndProc方法,在里面添加自定义消息的处理。写成类似如下的代码
:
protected override void WndProc(Message msg)
{
//look at the message type
switch ((long)msg.Msg)
{
case WM_HOTKEY:
//it's a hot key, so raise the event
...;
break;
default:
//all other messag