java如何实现截获系统消息?如题,是否真的不可以,急用!

解决方案 »

  1.   

    Windows系统消息,类似Windows程序中的钩子程序的。
      

  2.   

    用JNI吧,把windows的钩子通过java 的native方法调出来.
      

  3.   

    就是不想使用JNI呢,难道Java真的不行吗?
      

  4.   

    人家是运行在虚拟机上,跳出虚拟机去捕获系统消息应该只有用JNI和系统交互.
      

  5.   

    windows中有消息队列,相应的AWT中有事件队列EventQueue
    如下的辅助事件循环只捕获鼠标点击消息EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue();
    while(true)
    {
      try
     {
       AWTEvent e = eq.getNextEvent();
       if (e.getID()==MouseEvent.MOUSE_PRESSED)
      {
        MouseEvent mev = (MouseEvent)e;
        Point pt = mev.getPoint();
        ...
        break;
      }
     }catche(Exception e){}
    }
      

  6.   

    看得不是太明白,cheng_young(古道西风瘦马)能讲得更详细些吗?
      

  7.   

    hook这个概念只存在于windows上面,只有hook才能捕获windows的系统消息,因为java不是专门针对某个操作系统而设计的,所以java2的类库中没这个功能,要实现的话,你用VC++或Delphi来写一个DLL文件,写一个方法捕获消息,然后用JAVA中新增一个native方法来调用dll文件中的这个方法,VC或delphi获得系统消息的例子网上一大堆,至于java中怎样调用dll文件,请看:
    http://www.360doc.com/showWeb/0/0/30719.aspx
      

  8.   

    用VC++或Delphi来写一个DLL文件,捕获消息,然后用JAVA中native方法来调用dll文件中的这个方法,VC或delphi获得系统消息的例子网上一大堆,至于java中怎样调用dll文件,应该不难的
      

  9.   

    Java是可以捕获事件的,前提是你的程序和被捕获的程序是在一个JVM内。
    一般用于GUI的自动测试。
    有二种方式:
    1。自定义一个事件队列替代系统的事件队列
    import java.awt.EventQueue;
    import java.awt.*;
    import java.util.*;
    public class MyQueueEvent extends EventQueue {//自定义EventQueue的子类
      public MyQueueEvent() {
      }
      public static void main(String[] args) {
        SimpleExample.main(new String[]{null}) ;
        MyQueueEvent myQueueEvent1 = new MyQueueEvent();
        Toolkit.getDefaultToolkit().getSystemEventQueue().push(myQueueEvent1) ;//替代
      }
    //在这里重载事件分发的方法
      public void dispatchEvent(AWTEvent ae){
        if(ae.getSource() instanceof javax.swing.JButton)
        System.out.println("My apture:"+((javax.swing.JButton)ae.getSource()).getText()) ;
        super.dispatchEvent(ae);
      }2。自定义一个事件监听类,加到系统监听中
    public class MyEvtListener implements AWTEventListener {
    // 把自己定义的事件处理加到系统监听
            //这里只监听鼠标和键盘
    private MyEvtListener() {
    Toolkit.getDefaultToolkit().addAWTEventListener(this,
    AWTEvent.MOUSE_EVENT_MASK | AWTEvent.KEY_EVENT_MASK);
    } // 定义自己的事件处理
    public void eventDispatched(final AWTEvent eve) {
    myprocessEvent(eve);
    }
    }