低级易语言鼠标钩子键盘钩子的疑问.该怎么解决

java 写的低级鼠标键盘钩子示例 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 21时,
下载 jna.jar 和 platform.jar
(参考http://my.oschina.net/penngo/blog/12356):
代码片段(2)
1.&[代码][Java]代码&&&&
package jna_
import com.sun.jna.platform.win32.*;
import com.sun.jna.platform.win32.WinUser.*;
import com.sun.jna.platform.win32.WinDef.HMODULE;
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.KBDLLHOOKSTRUCT;
import com.sun.jna.platform.win32.WinUser.LowLevelKeyboardP
import com.sun.jna.win32.WinUser.Mouse.LowLevelMouseP
import com.sun.jna.win32.WinUser.Mouse.MOUSEHOOKSTRUCT;
public class MouseLLHook {
// 鼠标钩子函数里判断按键类型的常数
public static final int WM_LBUTTONUP = 514;
public static final int WM_LBUTTONDOWN = 513;
public static final int WM_RBUTTONUP = 517;
public static final int WM_RBUTTONDOWN = 516;
public static final int WM_MOUSEHWHEEL = 526;
public static final int WM_MOUSEWHEEL = 522;
public static final int WM_MOUSEMOVE = 512;
static HHOOK mouseHHK,keyboardHHK;//鼠标、键盘钩子的句柄
static LowLevelMouseProc mouseH//鼠标钩子函数
static LowLevelKeyboardProc keyboardH//键盘钩子函数
// 安装钩子
static void setHook() {
HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null);
mouseHHK = User32.INSTANCE.SetWindowsHookEx(WinUser.WH_MOUSE_LL, mouseHook, hMod, 0);
keyboardHHK = User32.INSTANCE.SetWindowsHookEx(WinUser.WH_KEYBOARD_LL, keyboardHook, hMod, 0);
//卸载钩子
static void unhook() {
User32.INSTANCE.UnhookWindowsHookEx(keyboardHHK);
User32.INSTANCE.UnhookWindowsHookEx(mouseHHK);
public static void main(String[] args) {
keyboardHook = new LowLevelKeyboardProc() {
//该函数参数的意思参考:/en-us/library/windows/desktop/ms644985(v=vs.85).aspx
public LRESULT callback(int nCode, WPARAM wParam, KBDLLHOOKSTRUCT lParam) {
int w = wParam.intValue();
//按下alt键时w=.WM_SYSKEYDOWN; 按下其他大部分键时w=WinUser.WM_KEYDOWN
if(w==WinUser.WM_KEYDOWN || w==WinUser.WM_SYSKEYDOWN)
System.out.println("key down: vkCode = "+lParam.vkCode);
else if(w==WinUser.WM_KEYUP || w==WinUser.WM_SYSKEYUP)
System.out.println("key up: vkCode = "+lParam.vkCode);
// 如果按下'q'退出程序,'q'的vkCode是81
if(lParam.vkCode==81) {
System.err.println("program terminated.");
System.exit(0);
return User32.INSTANCE.CallNextHookEx(keyboardHHK, nCode, wParam, lParam.getPointer());
mouseHook = new LowLevelMouseProc() {
//该函数参数的意思参考:/en-us/library/windows/desktop/ms644986(v=vs.85).aspx
public LRESULT callback(int nCode, WPARAM wParam, MOUSEHOOKSTRUCT lParam) {
switch (wParam.intValue()) {
case WM_MOUSEMOVE:
System.out.print("mouse moved:");
case WM_LBUTTONDOWN:
System.out.print("mouse left button down:");
case WM_LBUTTONUP:
System.out.print("mouse left button up");
case WM_RBUTTONUP:
System.out.print("mouse right button up:");
case WM_RBUTTONDOWN:
System.out.print("mouse right button down:");
case WM_MOUSEWHEEL:
System.out.print("mouse wheel rotated:");
System.out.println("("+lParam.pt.x+","+lParam.pt.y+")");
return User32.INSTANCE.CallNextHookEx(mouseHHK, nCode, wParam, lParam.getPointer());
System.out.println("press 'q' to quit.");
setHook();
MSG msg = new MSG();
// 消息循环
// 实际上while循环一次都不执行,这些代码的作用我理解是让程序在GetMessage函数这里阻塞,不然程序就结束了。
while ((result = User32.INSTANCE.GetMessage(msg, null, 0, 0)) != 0) {
if (result == -1) {
System.err.println("error in GetMessage");
User32.INSTANCE.TranslateMessage(msg);
User32.INSTANCE.DispatchMessage(msg);
2.&[代码]以上代码如果有两个类找不到(不知什么原因,我当时下载的版本就可以),那就只好自己写了:&&&&
import com.sun.jna.S
import com.sun.jna.platform.win32.BaseTSD.ULONG_PTR;
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.HOOKPROC;
import com.sun.jna.platform.win32.WinUser.POINT;
interface LowLevelMouseProc extends HOOKPROC {
LRESULT callback(int nCode, WPARAM wParam, MOUSEHOOKSTRUCT lParam);
class MOUSEHOOKSTRUCT extends Structure {
public class ByReference extends MOUSEHOOKSTRUCT implements
Structure.ByReference {
public POINT
public HWND
public int wHitTestC
public ULONG_PTR dwExtraI
开源中国-程序员在线工具:
相关的代码(3)
5回/1772阅
2回/1494阅
java也可以钩子了?? 记得之前不可以啊。。我out了 呵呵。研究下你的。
2楼:duty 发表于
哦。是借助本地库阿。
3楼:duty 发表于
哦。是借助本地库阿。
4楼:沙漠仙人掌 发表于
com.sun.jna.win32.WinUser.Mouse.LowLevelMouseProc找不到
5楼:leo-H 发表于
引用来自“breaking”的评论java也可以钩子了?? 记得之前不可以啊。。我out了 呵呵。研究下你的。我试了,只能用LowLevelMouseProc 和 LowLevelKeyboardProc ,其他钩子似乎不能用。不过LowLevelKeyboardProc做一些热键就够了,如果不用钩子做什么坏事的话
6楼:leo-H 发表于
引用来自“breaking”的评论哦。是借助本地库阿。嗯“本地库”什么意思?就引用两个jar文件,也不用dll文件啊
7楼:leo-H 发表于
引用来自“周小飞”的评论com.sun.jna.win32.WinUser.Mouse.LowLevelMouseProc找不到有啊,有两个版本,你是下载这个吗?http://java.net/projects/jna/downloads/directory/3.3.0
8楼:duty 发表于
引用来自“leo_de_macondo”的评论引用来自“周小飞”的评论com.sun.jna.win32.WinUser.Mouse.LowLevelMouseProc找不到有啊,有两个版本,你是下载这个吗?http://java.net/projects/jna/downloads/directory/3.3.0确实是本地库的。你解压那俩个jar包,里头有dll库。com.sun.jna.win32.WinUser.Mouse.LowLevelMouseProc 我也找不到。。两个版本都试过了。可以把你的发到我邮箱么??qinggang. 谢谢你哦呵呵
9楼:duty 发表于
引用来自“leo_de_macondo”的评论引用来自“breaking”的评论哦。是借助本地库阿。嗯“本地库”什么意思?就引用两个jar文件,也不用dll文件啊有各个平台的本地库。。linux unix x86 64位,还有mac。。
10楼:leo-H 发表于
引用来自“breaking”的评论引用来自“leo_de_macondo”的评论引用来自“周小飞”的评论com.sun.jna.win32.WinUser.Mouse.LowLevelMouseProc找不到有啊,有两个版本,你是下载这个吗?http://java.net/projects/jna/downloads/directory/3.3.0确实是本地库的。你解压那俩个jar包,里头有dll库。com.sun.jna.win32.WinUser.Mouse.LowLevelMouseProc 我也找不到。。两个版本都试过了。可以把你的发到我邮箱么??qinggang. 谢谢你哦呵呵发给你了。确实有dll文件,呵呵
11楼:leo-H 发表于
引用来自“breaking”的评论引用来自“leo_de_macondo”的评论引用来自“breaking”的评论哦。是借助本地库阿。嗯“本地库”什么意思?就引用两个jar文件,也不用dll文件啊有各个平台的本地库。。linux unix x86 64位,还有mac。。我记得dll文件是不能放在jar包中的啊。我曾经企图把dll放到我的jar包中,结果我的程序就运行不了。你知道怎么把dll文件打包到jar中么?
12楼:duty 发表于
引用来自“leo_de_macondo”的评论引用来自“breaking”的评论引用来自“leo_de_macondo”的评论引用来自“breaking”的评论哦。是借助本地库阿。嗯“本地库”什么意思?就引用两个jar文件,也不用dll文件啊有各个平台的本地库。。linux unix x86 64位,还有mac。。我记得dll文件是不能放在jar包中的啊。我曾经企图把dll放到我的jar包中,结果我的程序就运行不了。你知道怎么把dll文件打包到jar中么?我也没研究过这个 呵呵
13楼:javacc 发表于
import com.sun.jna.win32.WinUser.Mouse.LowLevelMouseP
import com.sun.jna.win32.WinUser.Mouse.MOUSEHOOKSTRUCT;
这两个类没有找到啊,我下的时3.3.0的那个版本
14楼:whaon 发表于
LZ自己写了类啊
15楼:leo-H 发表于
引用来自“童振豪”的评论LZ自己写了类啊
大家都说下载那两个jar包之后,LowLevelMouseProc和MOUSEHOOKSTRUCT这两个类找不到,所以就自己写了。不过我下载的就没问题,不知为什么
16楼:penngo 发表于
没记错的话,这两个类是在demo里面的,jna已经封装了大部分的window API,鼠标和键盘的钩子都提供了,不过它的DEMO里只有键盘的,鼠标的钩子需要自己扩展。
17楼:older 发表于
能不能把包 发一个给我啊? 谢谢了
18楼:leo-H 发表于
引用来自“older”的评论能不能把包 发一个给我啊? 谢谢了.cn/file/id_99221.htm
开源从代码分享开始
leo-H的其它代码谁知道中了键盘鼠标钩子程序怎么办?来自: gongyi226 日分享至 :
中了键盘鼠标钩子程序应该怎样处理,请介绍一下,谢谢!分享至 :
下一篇:上一篇:相关文章导语:鼠标和键盘是电脑的重要组成部分,在电脑的使用过程中发挥着重要作用,一旦它们出现问题,电脑的使用就无法实现。很多爱玩游戏的用户肯定在为没有一款得心应手的鼠标或者键盘而烦恼,因为经常遇到原装的电脑键盘或者鼠标在打游戏时无法默契配合,其实这是非常容易解无线技术可以说是应用在我们社会各个角落的一种高新技术,而人们也为了生活和工作的方便逐渐开始倾向于选择无线鼠标以及无线键盘,对于起那些与电脑主【导读】随着自己组装机越来越普遍,朋友们对于各个硬件的选择也逐渐变得挑剔起来。作为输入设备的鼠标键盘对于我们来说,更是显得很重要。如今的电脑离不开两件东西,那就是键盘和鼠标。在一栋现代化办公大楼施工中,网络布线工程是整体布线工程中极为重要的一个方面。有调查显示,电脑键盘由于很少清洗,每平方厘米微生物数量为510个,而厕所坐便器由于定期消毒,每平方厘米微生物数量不到8个,所以从某种意义上来涂料在我们的生活之中是非常容易见到的,因为随着社会的发展,人们对住房的需求也在不断的增长,而装修房子涂料是必备的产品之一,那么大家知道哪些品对于初涉装修的朋友们来说,装修的时候往往可能只考虑了那些“看得见的”,比如亮丽的地板、光鲜的橱柜等等,而忽略了那些辅游戏已经成为很多人生活中不可缺少的一部分,大部分人开电脑都是为了玩游戏,在玩游戏过程中需要鼠标和键盘的辅助,所以很多人都会买好的键盘和鼠标,其它类似问题相关帖子---谁知道中了键盘鼠标钩子程序怎么办?鼠标键盘钩子截获密码_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
鼠标键盘钩子截获密码
上传于|0|0|文档简介
&&VC鼠标键盘钩子截获密码
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩6页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢function GetMsgProc(code:
// hook code
wParam:WPARAM;
// removal option
lParam:LPARAM
// message
if (code&&HC_ACTION) then
result := CallNextHookEx(hHook,code,WParam,LParam);
myMsg := PMsg(lParam)^;
if (myMsg.message=wm_user1) then
[color=#FF0000]myMsg.message:=WM_NULL;//瞎蒙的
Result :=1;[/color]
result := CallNextHookEx(hHook,code,WParam,LParam);
然后用PostMessage(self.Handle,wm_user1,0,0);不过测试后发现不能屏蔽wm_user1消息,应该是我没操作好,文档没写清楚,不知道红色的地方该怎么改,特请大家帮个忙,谢谢。(备注:鼠标键盘钩子以前用简单点的还很成功,第一次尝试下用WH_GETMESSAGE拦截其他类型的消息,写的很差就别批评)------解决方案--------------------代码似乎没问题,你对WM_user1的定义是否是正确的?
------解决方案--------------------拦截消息时,能否进入到GetMsgProc代码中,wm_user1是否定义的与用户的一致
------解决方案--------------------
你咋不把你的正确的贴出来呢,顺便给我讲下hook嘛,一起学习!
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有

我要回帖

更多关于 c 键盘鼠标钩子 的文章

 

随机推荐