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

    Mouse Hook

    Posted on 2011-02-21 21:32 penngo 閱讀(926) 評論(0)  編輯  收藏 所屬分類: Java
    把之前寫的鼠標鉤子http://m.tkk7.com/pengo/archive/2010/12/17/340938.html代碼封裝下,放在博客里,下次要用時方便點,該部分代碼已用在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;
            }

        }

    }

    使用例子,很簡單,只需實現一個MouseHookListener接口就行了,在MouseHookListener里面實現你要干的事就行了。
    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,需要的自己下載。
    主站蜘蛛池模板: 日韩精品内射视频免费观看| 精品国产免费一区二区| 亚洲色欲色欲www| 又粗又硬又大又爽免费视频播放| 大地资源在线资源免费观看| 亚洲同性男gay网站在线观看| 免费国产真实迷j在线观看| 日本免费中文视频| 激情小说亚洲图片| 久久久久亚洲av无码专区喷水| 四虎永久免费影院| 2015日韩永久免费视频播放| 精品特级一级毛片免费观看| 亚洲高清视频免费| 亚洲伊人成无码综合网 | 九九九精品视频免费| 亚洲黄色在线视频| 国内精品久久久久久久亚洲| 在线观看视频免费完整版| aa在线免费观看| 亚洲av无码无线在线观看| 亚洲国产综合精品中文第一区| 国产美女被遭强高潮免费网站| 日韩免费无码一区二区三区| 免费夜色污私人影院网站| 亚洲午夜电影在线观看高清| 亚洲精品乱码久久久久久中文字幕| 在线观看人成视频免费| 最近新韩国日本免费观看| fc2免费人成在线| 亚洲AV色欲色欲WWW| 亚洲人成网站在线观看播放青青| 亚洲色中文字幕无码AV| 免费国产高清视频| 日韩精品视频免费在线观看| 国内精品乱码卡1卡2卡3免费 | 桃子视频在线观看高清免费视频| 草久免费在线观看网站| 亚洲AV无码一区二区三区网址| 亚洲精品mv在线观看| 亚洲成a人片77777老司机|