java获取系统鼠标位置(jni+dll应用)

来源:互联网 发布:汉诺塔小学生数学算法 编辑:程序博客网 时间:2024/04/30 10:55

最近玩游戏点击鼠标,按键觉得太辛苦了,想写辅助程序帮忙操作。java中没有找到获取系统鼠标的方法,就借助dll来实现。

先建立java文件MouseInfo.java

 

public class MouseInfo {
    
static{
        System.loadLibrary(
"MouseInfo");
    }

    
public native static int getMousePosX(); 
    
public native static int getMousePosY(); 
    
public static void main(String[] args)throws Exception {
        
// TODO Auto-generated method stub
        MouseInfo mouseInfo = new MouseInfo();
        System.out.println(
"x:"+mouseInfo.getMousePosX()+"y:"+mouseInfo.getMousePosY());
    }

}

 

javac MouseInfo.java

javah MouseInfo

生成MouseInfo.h

 

/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
<jni.h>
/* Header for class MouseInfo */

#ifndef _Included_MouseInfo
#define _Included_MouseInfo
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     MouseInfo
 * Method:    getMousePosX
 * Signature: ()I
 
*/

JNIEXPORT jint JNICALL Java_MouseInfo_getMousePosX
  (JNIEnv 
*, jclass);

/*
 * Class:     MouseInfo
 * Method:    getMousePosY
 * Signature: ()I
 
*/

JNIEXPORT jint JNICALL Java_MouseInfo_getMousePosY
  (JNIEnv 
*, jclass);

#ifdef __cplusplus
}

#endif
#endif

 

用vc建一个win32动态dll工程

建立StdAfx.h

 

// stdafx.h : include file for standard system include files,
//  or project specific include files that are used frequently, but
//      are changed infrequently
//

#if !defined(AFX_STDAFX_H__9CE33D16_5EAB_479B_A1CE_AEC7E4B243B6__INCLUDED_)
#define AFX_STDAFX_H__9CE33D16_5EAB_479B_A1CE_AEC7E4B243B6__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define VC_EXTRALEAN        // Exclude rarely-used stuff from Windows headers

#include 
<afxwin.h>         // MFC core and standard components
#include <afxext.h>         // MFC extensions

#ifndef _AFX_NO_OLE_SUPPORT
#include 
<afxole.h>         // MFC OLE classes
#include <afxodlgs.h>       // MFC OLE dialog classes
#include <afxdisp.h>        // MFC Automation classes
#endif // _AFX_NO_OLE_SUPPORT


#ifndef _AFX_NO_DB_SUPPORT
#include 
<afxdb.h>            // MFC ODBC database classes
#endif // _AFX_NO_DB_SUPPORT

#ifndef _AFX_NO_DAO_SUPPORT
#include 
<afxdao.h>            // MFC DAO database classes
#endif // _AFX_NO_DAO_SUPPORT

#include 
<afxdtctl.h>        // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include 
<afxcmn.h>            // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT


//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__9CE33D16_5EAB_479B_A1CE_AEC7E4B243B6__INCLUDED_)

 

建立MouseInfo.cpp

 

#include "MouseInfo.h"
#include 
"StdAfx.h"

JNIEXPORT jint JNICALL Java_MouseInfo_getMousePosX
  (JNIEnv 
*, jclass)
{
    
//获取当前系统鼠标的x坐标,返回int型
    int xPos = 100;
    POINT   pt;   
    GetCursorPos(
&pt);
    xPos 
= pt.x;

    
return xPos;
}


JNIEXPORT jint JNICALL Java_MouseInfo_getMousePosY
  (JNIEnv 
*, jclass)
{
    
//获取当前系统鼠标的y坐标,返回int型
    int yPos = 100;
    POINT   pt;   
    GetCursorPos(
&pt);
    yPos 
= pt.y;

    
return yPos;
}


 

将生成的MouseInfo.dll放入java项目中运行。

这样在java中就可以获取到鼠标的系统位置。

然后应用java中的Robot类来方便的处理各种模拟事件。也许这是一种多此一举的做法,因为习惯了java编程,所以这个思路就这么形成了。呵呵。

原创粉丝点击