通过JNI 技术实现 键盘监听
2008-08-25 10:34
232 查看
#include "jni.h"
#include "windows.h"
#include "SystemKey.h"
#include <iostream>
using namespace std;
JNIEnv* _env;
jclass _obj;
jmethodID _id;
HHOOK g_hook = NULL;
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam){
if(nCode>=0 && g_hook != NULL){
(*_env).CallStaticVoidMethod(_obj,_id,wParam);
}
return CallNextHookEx(g_hook,nCode,wParam,lParam);
}
JNIEXPORT void JNICALL Java_SystemKey_Init(JNIEnv * env, jobject obj){
_obj = (*env).GetObjectClass(obj);
_id = (*env).GetStaticMethodID(_obj,"KeyAction","(I)V");
_env = env;
g_hook = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("KeyListenerDLL"),0);
}
JNIEXPORT void JNICALL Java_SystemKey_UnHook(JNIEnv * env, jobject obj){
UnhookWindowsHookEx(g_hook);
}
public class SystemKey{
private static SystemKeyListener listener = null;
private boolean out = true;
public SystemKey(){
Init();
}
static{
System.loadLibrary("KeyListenerDLL");
}
public void addSystemKeyListener(SystemKeyListener listener){
this.listener = listener;
}
public static void KeyAction(int key){
if(listener!=null)
listener.keyPressed(key);
}
public void removeSystemKeyListener(SystemKeyListener listener){
if(this.listener.equals(listener)){
this.listener = null;
}
}
public native void Init();
public native void UnHook();
protected void finalize(){
UnHook();
}
}
public interface SystemKeyListener{
public void keyPressed(int key);
}
import java.awt.*;
import javax.swing.*;
public class Test extends JFrame implements SystemKeyListener{
public Test(){
this.setSize(50,50);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setResizable(false);
SystemKey k = new SystemKey();
k.addSystemKeyListener(this);
k.removeSystemKeyListener(this);
this.show(true);
}
public void keyPressed(int key){
System.out.println(key);
}
public static void main(String [] args){
new Test();
}
}
相关文章推荐
- 通过jna简单实现java后台监听键盘触发修改系统时间
- Delphi中通过钩子技术实现键盘监控
- 通过监听Windows消息实现控件的键盘和鼠标事件路由
- 如何通过鼠标或者键盘监听器,实现组建特有的监听方法
- Delphi中通过钩子技术实现键盘监控
- Android 通过JNI实现守护进程,使Service服务不被杀死
- Linux下通过bonding技术实现网络负载均衡及冗余
- JS实现键盘监听(包括组合键)
- Linux下通过bonding技术实现网络负载均衡及冗余
- 通过监听设置实现登录控制
- Java通过调用C/C++实现的DLL动态库――JNI的方法
- Python利用pyHook实现监听用户鼠标与键盘事件
- 利用Hook技术实现键盘监控
- Android下通过hook技术实现透明加解密保障数据安全
- Python利用pyHook实现监听用户鼠标与键盘事件
- 使用JNI技术实现JAVA程序调用dll
- Android平台下通过JNI快速实现音视频通信
- 通过C#实现集合类纵览.NET Collections及相关技术
- 通过JNI实现Java和C++的相互调用(转)