<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 59, comments - 244, trackbacks - 0, articles - 0
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    java本身是沒(méi)有提供直接訪問(wèn)系統(tǒng)的API方法,查了下資料,要實(shí)現(xiàn)鼠標(biāo)鉤子有3種方法,
    1、使用JNI方法,需要自己寫(xiě)C實(shí)現(xiàn),比較復(fù)雜。
    2、使用swt extension,直接提供了鼠標(biāo)鉤子的實(shí)現(xiàn),但是用它調(diào)用其它windows api,沒(méi)有成功,放棄了使用它。
    3、使用JNA,JNA是建立在JNI 技術(shù)之上的,簡(jiǎn)化了Java訪問(wèn)window api的方法。
    考慮到要調(diào)用其它window api的原因,選用了JNA,順便寫(xiě)一個(gè)JNA實(shí)現(xiàn)鼠標(biāo)鉤子的測(cè)試?yán)樱?br />
    public class MouseHook extends JFrame {
        
    private static final long serialVersionUID = 1L;
        
    public static final int WM_MOUSEMOVE = 512;
        
    public static final int WM_LBUTTONDOWN = 513;
        
    public static final int WM_LBUTTONUP = 514;
        
    public static final int WM_RBUTTONDOWN = 516;
        
    public static final int WM_RBUTTONUP = 517;
        
    public static final int WM_MBUTTONDOWN = 519;
        
    public static final int WM_MBUTTONUP = 520;
        
    private static HHOOK hhk;
        
    private static LowLevelMouseProc mouseHook;

        
    private JLabel labelX;
        
    private JLabel labelY;
        
    private JPanel contentPane;

        
    public static void main(String[] args) {
            
    final MouseHook frame = new MouseHook();
            frame.setVisible(
    true);

            
    final User32 lib = User32.INSTANCE;
            HMODULE hMod 
    = Kernel32.INSTANCE.GetModuleHandle(null);
            mouseHook 
    = new LowLevelMouseProc() {
                
    public LRESULT callback(int nCode, WPARAM wParam,
                        MOUSEHOOKSTRUCT info) 
    {
                    
    if (nCode >= 0{
                        
    switch (wParam.intValue()) {
                        
    case MouseHook.WM_MOUSEMOVE:
                            System.err.println(
    "in callback,  x=" + info.pt.x
                                    
    + " y=" + info.pt.y);
                            frame.getLabelX().setText(String.valueOf(info.pt.x));
                            frame.getLabelY().setText(String.valueOf(info.pt.y));
                        }

                    }

                    
    return lib
                            .CallNextHookEx(hhk, nCode, wParam, info.getPointer());
                }

            }
    ;
            hhk 
    = lib.SetWindowsHookEx(User32.WH_MOUSE_LL, mouseHook, hMod, 0);

            
    int result;
            MSG msg 
    = new MSG();
            
    while ((result = lib.GetMessage(msg, null00)) != 0{
                
    if (result == -1{
                    System.err.println(
    "error in get message");
                    
    break;
                }
     else {
                    System.err.println(
    "got message");
                    lib.TranslateMessage(msg);
                    lib.DispatchMessage(msg);
                }

            }

            lib.UnhookWindowsHookEx(hhk);
        }


        
    public MouseHook() {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setBounds(
    100100450300);
            contentPane 
    = new JPanel();
            contentPane.setBorder(
    new EmptyBorder(5555));
            setContentPane(contentPane);
            contentPane.setLayout(
    null);

            JLabel lblX 
    = new JLabel("X:");
            lblX.setFont(
    new Font("宋體", Font.PLAIN, 14));
            lblX.setBounds(
    46332227);
            contentPane.add(lblX);

            JLabel lblY 
    = new JLabel("Y:");
            lblY.setFont(
    new Font("宋體", Font.PLAIN, 14));
            lblY.setBounds(
    144391715);
            contentPane.add(lblY);

            labelX 
    = new JLabel("");
            labelX.setBounds(
    65395415);
            contentPane.add(labelX);

            labelY 
    = new JLabel("");
            labelY.setBounds(
    160395415);
            contentPane.add(labelY);
        }


        
    public JLabel getLabelX() {
            
    return labelX;
        }


        
    public void setLabelX(JLabel labelX) {
            
    this.labelX = labelX;
        }


        
    public JLabel getLabelY() {
            
    return labelY;
        }


        
    public void setLabelY(JLabel labelY) {
            
    this.labelY = labelY;
        }


        
    public interface LowLevelMouseProc extends HOOKPROC {
            LRESULT callback(
    int nCode, WPARAM wParam, MOUSEHOOKSTRUCT lParam);
        }


        
    public class Point extends Structure {
            
    public class ByReference extends Point implements Structure.ByReference {
            }
    ;
            
    public com.sun.jna.NativeLong x;
            
    public com.sun.jna.NativeLong y;
        }


        
    public static class MOUSEHOOKSTRUCT extends Structure {
            
    public static class ByReference extends MOUSEHOOKSTRUCT implements
                    Structure.ByReference 
    {
            }
    ;

            
    public User32.POINT pt;
            
    public User32.HWND hwnd;
            
    public int wHitTestCode;
            
    public User32.ULONG_PTR dwExtraInfo;
        }

    }

    源碼

    評(píng)論

    # Antique Oil Painting  回復(fù)  更多評(píng)論   

    2010-12-17 17:19 by Antique Oil Painting
    怎么都是些代碼啊 唉

    # re: java鼠標(biāo)鉤子實(shí)現(xiàn)  回復(fù)  更多評(píng)論   

    2014-06-16 10:00 by wholwh
    謝謝參考

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 在线播放国产不卡免费视频| 久久精品国产亚洲AV麻豆不卡 | 亚洲欧洲自拍拍偷综合| 亚洲熟妇无码另类久久久| 亚洲无码视频在线| 亚洲一区二区三区乱码A| 亚洲午夜爱爱香蕉片| 亚洲福利精品一区二区三区| 无码不卡亚洲成?人片| 免费一级毛片在线播放| 俄罗斯极品美女毛片免费播放| 国产免费爽爽视频免费可以看| 国产又大又黑又粗免费视频 | 午夜老司机永久免费看片| 国产精品视频白浆免费视频| 暖暖免费在线中文日本| 久久国产精品免费观看| 久久久久久夜精品精品免费啦| 久久综合国产乱子伦精品免费| 2021在线观看视频精品免费| 色影音免费色资源| 好吊妞视频免费视频| 日本免费一本天堂在线| 免费a级毛片在线观看| 久久精品国产亚洲精品| 亚洲AV无码精品色午夜果冻不卡| 亚洲综合在线观看视频| 亚洲国产精品综合久久20| 亚洲a∨国产av综合av下载| 一级a性色生活片久久无少妇一级婬片免费放 | 亚洲日韩欧洲无码av夜夜摸| 亚洲一区影音先锋色资源| 亚洲一区免费在线观看| 国产精品无码亚洲精品2021| 亚洲一区二区三区免费| 久久国产免费一区二区三区| 免费AA片少妇人AA片直播| 国产成人精品男人免费| 中文字幕精品亚洲无线码二区| 2022年亚洲午夜一区二区福利 | 精品亚洲视频在线观看|