Le deal à ne pas rater :
Nike FR : 25 % sur tous les articles
Voir le deal

Surveiller la souris sur votre Windows

Aller en bas

Surveiller la souris sur votre Windows Empty Surveiller la souris sur votre Windows

Message  Gus le Lun 27 Sep - 11:42

Voici une entité qui vous permettra de surveiller les déplacements et les clics de votre souris sous Windows. Cette entité fait appel à l'API jna (Java Native Access)

gus.mouse.tracker.onscreen2

Code:
package gus05.entity.gus.mouse.tracker.onscreen2;

import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import com.sun.jna.Platform;
import com.sun.jna.Structure;
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.BaseTSD.ULONG_PTR;
import com.sun.jna.platform.win32.WinDef.HMODULE;
import com.sun.jna.platform.win32.WinDef.HWND;
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.HOOKPROC;
import com.sun.jna.platform.win32.WinUser.MSG;
import com.sun.jna.platform.win32.WinUser.POINT;
import gus05.framework.core.Entity;
import gus05.framework.core.Outside;
import gus05.framework.features.Provide;
import gus05.framework.tools.DefaultSupport;

public class TrackerOnScreen2 extends DefaultSupport implements Entity, Provide, Runnable {

    public String getName()            {return "gus.mouse.tracker.onscreen2";}
    public String getCreationDate()      {return "2010.09.27";}

    public static final int WM_LMOVED = 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 HHOOK hhk;
    private Point point;
   
   
    public TrackerOnScreen2() throws Exception
    {
       if(!Platform.isWindows()) return;
       new Thread(this,getName()).start();
       
       Outside.service(this,"app.supportexit").addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {User32.INSTANCE.UnhookWindowsHookEx(hhk);}
      });
    }
   
   
    public Object provide() throws Exception
    {return point;}
   
   
    public void run()
    {
       LowLevelMouseProcImpl mouseProc = new LowLevelMouseProcImpl();
       HMODULE hmodule = Kernel32.INSTANCE.GetModuleHandle(null);
       hhk = User32.INSTANCE.SetWindowsHookEx(WinUser.WH_MOUSE_LL,mouseProc,hmodule,0);
       
        MSG msg = new MSG();
        while((User32.INSTANCE.GetMessage(msg,null,0,0))!=0)
        {
           User32.INSTANCE.TranslateMessage(msg);
           User32.INSTANCE.DispatchMessage(msg);
        }
   }
   
   
    private interface LowLevelMouseProc extends HOOKPROC
    {
        LRESULT callback(int nCode, WPARAM wParam, MOUSEHOOKSTRUCT lParam);
    }
   
    private class LowLevelMouseProcImpl implements LowLevelMouseProc
    {
       public LRESULT callback(int nCode, WPARAM wParam, MOUSEHOOKSTRUCT info)
       {
          if(nCode>=0)
            {
                switch(wParam.intValue())
                {
                   case WM_LMOVED:setPoint(info);mouseMoved();break;
                   
                   case WM_LBUTTONDOWN:setPoint(info);leftButtonPressed();break;
                    case WM_LBUTTONUP:setPoint(info);leftButtonReleased();break;
                   
                    case WM_RBUTTONDOWN:setPoint(info);rightButtonPressed();break;
                    case WM_RBUTTONUP:setPoint(info);rightButtonReleased();break;
                   
                    case WM_MBUTTONDOWN:setPoint(info);middleButtonPressed();break;
                    case WM_MBUTTONUP:setPoint(info);middleButtonReleased();break;
                   
                    default:break;
                }
            }
            return User32.INSTANCE.CallNextHookEx(hhk, nCode, wParam, info.getPointer());
        }
    }
   
    public static 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;
    }

    private void mouseMoved()      {send(this,"mouseMoved()");}
   
    private void leftButtonPressed()      {send(this,"leftButtonPressed()");}
    private void rightButtonPressed()   {send(this,"rightButtonPressed()");}
    private void middleButtonPressed()   {send(this,"middleButtonPressed()");}
   
    private void leftButtonReleased()      {send(this,"leftButtonReleased");}
    private void rightButtonReleased()   {send(this,"rightButtonReleased()");}
    private void middleButtonReleased()   {send(this,"middleButtonReleased()");}
   
   
   private void setPoint(MOUSEHOOKSTRUCT info)
   {point = new Point(info.pt.x,info.pt.y);}
}
Gus
Gus
Admin

Messages : 249
Date d'inscription : 01/09/2009

http://www.gus05.com

Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum