这几天用Java做个锁屏软件需要屏蔽系统热键,就是Win+D,Ctrl+Alt+Del等,参考了这篇文章:
Java运用JNI调用dll(含源码)实现屏蔽系统热键和任务栏
但是对于只懂Java的人无疑是一种折磨,
好不容易跟着文章做下来又报错,总之很是痛苦,
结合这两篇文章终于实现了Java屏蔽系统热键了。
下面写出来,图文结合,宣泄一下这几天的郁闷。
【说明】
1.本文都是在eclipse下开发的,dos下可以自己尝试。
2.以下源码都是上面第一篇文章中的
【1】编写Java文件,编译出class文件,javah出.h文件
——Java源码
package com.uikoo9.JLocker;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
/**
*
* @author Administrator
*/
public class ShieldHotKey {
static{
//下面这部分是为了增加灵活性,dll可以放到jar包中
try
{
File file = File.createTempFile("shieldHK", ".dll");
FileOutputStream fout = new FileOutputStream(file);
InputStream in = ShieldHotKey.class.getResourceAsStream("shieldHK.dll");
byte[] b = new byte[1024];
int len = 0;
while((len = in.read(b)) != -1){
fout.write(b, 0, len);
}
fout.flush();
in.close();
fout.close();
System.load(file.getAbsolutePath());
}
catch (Exception e) {}
// System.load("D:/shieldHK.dll");
}
public static native void Attach();//启动屏蔽
public static native void Detach();//关闭屏蔽
}
说明:1.类ShieldHotKey是建在com.uikoo9.JLocker包下的,
--------------------------------------分割线 --------------------------------------
编写高质量代码 改善Java程序的151个建议 PDF高清完整版
Java对象序列化ObjectOutputStream和ObjectInputStream示例
--------------------------------------分割线 --------------------------------------
2.将原来的System.load("D:/shieldHK.dll");改写是为了增加灵活性。
——Eclipse自动会生成.class文件,找到它,如图:
——cmd下,到这个bin的这一层,输入已下命令生成.h文件:
生成的.h文件: