<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 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Mouse Hook

    Posted on 2011-02-21 21:32 penngo 閱讀(926) 評論(0)  編輯  收藏 所屬分類: Java
    把之前寫的鼠標(biāo)鉤子http://m.tkk7.com/pengo/archive/2010/12/17/340938.html代碼封裝下,放在博客里,下次要用時方便點(diǎn),該部分代碼已用在ColorCat中。
    MouseHookProc.java
    import com.sun.jna.platform.win32.WinDef.LRESULT;
    import com.sun.jna.platform.win32.WinDef.WPARAM;
    import com.sun.jna.platform.win32.WinUser.HOOKPROC;

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

    MouseHookStruct.java
    import com.sun.jna.Structure;
    import com.sun.jna.platform.win32.BaseTSD.ULONG_PTR;
    import com.sun.jna.platform.win32.WinDef.HWND;
    import com.sun.jna.platform.win32.WinUser.POINT;
    /**
     * 屏幕取色工具
     * 
     * 
    @author penngo(http://m.tkk7.com/pengo/)
     
    */

    public class MouseHookStruct extends Structure
    {
        
    public static class ByReference extends MouseHookStruct implements Structure.ByReference {};
        
    public POINT pt;
        
    public HWND hwnd;
        
    public int wHitTestCode;
        
    public ULONG_PTR dwExtraInfo;
    }

    MouseHookListener.java
    import com.sun.jna.platform.win32.WinDef.WPARAM;
    /**
     * 屏幕取色工具
     * 
     * 
    @author penngo(http://m.tkk7.com/pengo/)
     
    */

    public interface MouseHookListener{
        
    void mouseMove(int nCode, WPARAM wParam,
                MouseHookStruct lParam);
        
    void lButtonDown(int nCode, WPARAM wParam,
                MouseHookStruct lParam);
        
    void lButtonUp(int nCode, WPARAM wParam,
                MouseHookStruct lParam);
        
    void rButtonDown(int nCode, WPARAM wParam,
                MouseHookStruct lParam);
        
    void rButtonUp(int nCode, WPARAM wParam,
                MouseHookStruct lParam);
        
    void mButtonDown(int nCode, WPARAM wParam,
                MouseHookStruct lParam);
        
    void mButtonUp(int nCode, WPARAM wParam,
                MouseHookStruct lParam);
    }

    MouseHook.java
    import com.sun.jna.Platform;
    import com.sun.jna.platform.win32.Kernel32;
    import com.sun.jna.platform.win32.User32;
    import com.sun.jna.platform.win32.WinUser;
    import com.sun.jna.platform.win32.WinDef.HMODULE;
    import com.sun.jna.platform.win32.WinDef.LRESULT;
    import com.sun.jna.platform.win32.WinDef.WPARAM;
    import com.sun.jna.platform.win32.WinUser.HHOOK;
    import com.sun.jna.platform.win32.WinUser.MSG;
    /**
     * 
    @author penngo(http://m.tkk7.com/pengo/)
     
    */

    public class MouseHook {
        
    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;
        
    public User32 lib;
        
    private static HHOOK hhk;
        
    private MouseHookListener hookListener;
        
    private HMODULE hMod;
        
    private boolean isWindows = false;
        
    private boolean isStart = false;
        
    public MouseHook() {
            isWindows 
    = Platform.isWindows();
            
    if(isWindows){
                lib 
    = User32.INSTANCE;
                hMod 
    = Kernel32.INSTANCE.GetModuleHandle(null);
            }

            
        }


        
    public void addMouseHookListener(MouseHookListener hookListener) {
            
    this.hookListener = hookListener;
        }


        
    public void startWindowsHookEx() {
            MouseHookProc hookProc 
    = new MouseHookProc(){
                
    public LRESULT callback(int nCode, WPARAM wParam,
                        MouseHookStruct lParam) 
    {
                    
    if (nCode >= 0{
                        
    switch (wParam.intValue()) {
                        
    case MouseHook.WM_MOUSEMOVE:
                            hookListener.mouseMove(nCode, wParam, lParam);
                            
    break;
                        
    case MouseHook.WM_LBUTTONDOWN:
                            hookListener.lButtonDown(nCode, wParam, lParam);
                            
    break;
                        
    case MouseHook.WM_LBUTTONUP:
                            hookListener.lButtonUp(nCode, wParam, lParam);
                            
    break;
                        
    case MouseHook.WM_RBUTTONDOWN:
                            hookListener.rButtonDown(nCode, wParam, lParam);
                            
    break;
                        
    case MouseHook.WM_RBUTTONUP:
                            hookListener.rButtonUp(nCode, wParam, lParam);
                            
    break;
                        
    case MouseHook.WM_MBUTTONDOWN:
                            hookListener.mButtonDown(nCode, wParam, lParam);
                            
    break;
                        
    case MouseHook.WM_MBUTTONUP:
                            hookListener.mButtonUp(nCode, wParam, lParam);
                            
    break;
                        }

                    }

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

            }
    ;
            
    if(isWindows){
                isStart 
    = true;
                lib.SetWindowsHookEx(WinUser.WH_MOUSE_LL, hookProc, hMod, 
    0);
                MSG msg 
    = new MSG();
                lib.GetMessage(msg, 
    null00);
            }

        }


        
    public void stopWindowsHookEx() {
            
    if(isWindows && isStart){
                lib.UnhookWindowsHookEx(hhk);
                isStart 
    = false;
            }

        }

    }

    使用例子,很簡單,只需實(shí)現(xiàn)一個MouseHookListener接口就行了,在MouseHookListener里面實(shí)現(xiàn)你要干的事就行了。
    TestMain.java
    import com.sun.jna.platform.win32.WinDef.WPARAM;

    public class TestMain {
        
    public static void main(String[] args) throws Exception{
            MouseHook mouseHook 
    = new MouseHook();
            mouseHook.addMouseHookListener(
    new MouseHookListener() {
                
    public void mouseMove(int nCode, WPARAM wParam,
                        MouseHookStruct lParam)
    {
                    
    int x = lParam.pt.x;
                    
    int y = lParam.pt.y;
                    System.out.println(x 
    + " " + y);
                }

                
    public void lButtonDown(int nCode, WPARAM wParam,
                        MouseHookStruct lParam)
    {
                }

                
    public void lButtonUp(int nCode, WPARAM wParam,
                        MouseHookStruct lParam)
    {
                }

                
    public void rButtonDown(int nCode, WPARAM wParam,
                        MouseHookStruct lParam)
    {
                }

                
    public void rButtonUp(int nCode, WPARAM wParam,
                        MouseHookStruct lParam)
    {
                }

                
    public void mButtonDown(int nCode, WPARAM wParam,
                        MouseHookStruct lParam)
    {
                }

                
    public void mButtonUp(int nCode, WPARAM wParam,
                        MouseHookStruct lParam)
    {
                }

            }
    );
            mouseHook.startWindowsHookEx();
            Thread.sleep(
    10000);
            mouseHook.stopWindowsHookEx();
        }

    }
    以上代碼需要jna包支持。

    代碼放在ColorCat里面,svn下載地址:https://colorcat.googlecode.com/svn/trunk/src/com/colorcat/mouse,需要的自己下載。
    主站蜘蛛池模板: 国产卡一卡二卡三免费入口| 精品国产_亚洲人成在线| 亚洲人成电影在线天堂| 亚洲熟妇av一区二区三区| 亚洲偷自拍拍综合网| 国产成人精品久久亚洲| 国产午夜亚洲精品午夜鲁丝片| 亚洲AV伊人久久青青草原| 亚洲人成影院在线观看| 中文字幕专区在线亚洲| 亚洲精品美女久久久久99| 亚洲国产美女精品久久久久∴| 亚洲无人区午夜福利码高清完整版| 亚洲婷婷五月综合狠狠爱| 亚洲AV永久纯肉无码精品动漫| 亚洲国产天堂久久综合网站| 亚洲视频网站在线观看| 亚洲AV无码乱码麻豆精品国产| 亚洲国产成人精品激情| 亚洲欧美日韩综合久久久| 狠狠入ady亚洲精品| 一本一道dvd在线观看免费视频| 国产成人无码精品久久久免费 | 亚洲日本在线播放| 亚洲av无码专区在线| 亚洲精品又粗又大又爽A片| 老妇激情毛片免费| 老司机精品免费视频| 老汉精品免费AV在线播放| 国产人成免费视频网站| 成年女人男人免费视频播放| 免费在线观看亚洲| 亚洲综合在线另类色区奇米| 亚洲网址在线观看你懂的| 学生妹亚洲一区二区| 美女视频黄a视频全免费网站一区 美女视频黄a视频全免费网站色 | 久久99青青精品免费观看| 曰曰鲁夜夜免费播放视频| 国产精品久久久久影院免费| 精品国产亚洲一区二区在线观看| 亚洲AV美女一区二区三区|