监控键盘的的按键情况,而且键按下的时间反映长度 。使用Platform Invoke(P/Invoke)调用Win32 API中外部函数。private uint start = 0;
private uint stop = 0;...................................  [DllImport("kernel32.dll")]
  public static extern uint GetTickCount();   protected override void OnKeyDown(KeyEventArgs args)
  {
   start = GetTickCount();
  }  protected override void OnKeyUp(KeyEventArgs args)
  {
   stop = GetTickCount();
   uint elapsed = (stop - start);
   MessageBox.Show(Convert.ToString(args.KeyData)+", time elapsed: "+Convert.ToString(elapsed)+" msecs");
  }个人认为没有错,编译也通过了,但就是不能触发事件,郁闷中

解决方案 »

  1.   

    这个要用钩子才可以
    用一个key事件就记录键盘?不是搞笑吧
      

  2.   

    可以在应用程序中捕获在本程序窗口上所进行的键盘操作.
    但如果想要将此程序作成一个监控程序,捕获在Windows平台下任意窗口上的键盘操作,就需要借助于全局钩子来实现了。http://www.ccw.com.cn/htm/app/aprog/01_5_24_5.asp
      

  3.   

    这个问题,用Hook最合适,过滤出WH_KEYBOARD消息,进行特定处理。hook可以监听特定程序的消息,也可以hook全局消息,既整个系统的消息。
      

  4.   

    这个问题,我试过了,感觉是,KeyDown, KeyUp消息,传递不到Form中来。你写的函数没有问题,如果你在Form中加一个TextBox控件,把两你给出的两个函数作为对TextBox的KeyDown和KeyUp的响应函数的话,当你在TextBox中按下键中,会正常运行,弹出消息框。我试着在TextBox的KeyDown事件中把e.EventHandle = true;让该消息向上传递,但这个消息就是送不到form中。感觉就是:Form跟本就不接受KeyDown和KeyUp消息,那些KeyDown和KeyUp的事件是从Control继承来的,在Form里却成了一个摆设,跟本没作用。
      

  5.   

    可以在应用程序中捕获在本程序窗口上所进行的键盘操作.
    但如果想要将此程序作成一个监控程序,捕获在Windows平台下任意窗口上的键盘操作,就需要借助于全局钩子来实现了。
    晕呐.
    是你们的方法根本就有错.你们的方法最多只能在本窗口获得焦点的时候,捕获键盘消息.
    监视器这样好做,那不都做啦!!!好好去看看HOOK吧.