Projet gus05 de développement Java
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment :
Cdiscount : -30€ dès 300€ ...
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 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