c# winform,WndProc 消息响应,如何避免重复触发?如何判断接受的消息为“按键弹起”?

用C# 编写 winform 程序,注册了热键ESC,然后用WndProc 接受消息进行响应。

现象:当键盘按住ESC稍长时间,会重复触发设定的功能函数。

设想:如果可以只接受键盘的弹起消息,是不是可以避免重复触发。
问题:如何避免重复触发?如何判断消息为“按键弹起”

protected override void WndProc(ref Message m)
{
const int WM_HOTKEY = 0x0312;

        switch (m.Msg)
        {
            case WM_HOTKEY:
                            switch (m.WParam.ToInt32())
            {
                                    case (int)EnumHotkey.ESC:
                                    ....

WM_KEYUP 获取按键弹起消息,然后判断ESC键。。。