我需要实现一个钩子程序来禁用鼠标键盘的输入,然后将其生成为dll,然后在java中调用,调用时候程序没有报错,但是调用无效.下面是部分代码

c++部分:

// dllmain.cpp : Defines the entry point for the DLL application.

#include "stdafx.h"

#include "stdio.h"

HHOOK g_HookHwnd = NULL;

HHOOK g_hMouse = NULL;

// 钩子子程

extern "C" _declspec(dllexport) LRESULT CALLBACK MyHookFun(int nCode, WPARAM wParam, LPARAM lParam)

{

printf("in hook key function\n");

// 这个Structure包含了键盘的信息

/*typedef struct {

DWORD vkCode;

DWORD scanCode;

DWORD flags;

DWORD time;

ULONG_PTR dwExtraInfo;

} KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;*/

// 我们只需要那个vkCode

PKBDLLHOOKSTRUCT pVirKey = (PKBDLLHOOKSTRUCT)lParam;

// MSDN说了,nCode < 0的时候别处理

if (nCode >= 0)

{

// 按键消息

switch (wParam)

{

case WM_KEYDOWN:

case WM_SYSKEYDOWN:

case WM_KEYUP:

case WM_SYSKEYUP:

switch (pVirKey->vkCode)

{

case VK_LWIN:

case VK_RWIN:

return 1;  // 吃掉消息

break;

}

return 1;

break;

}

}

return CallNextHookEx(g_HookHwnd, nCode, wParam, lParam);

}

extern "C" _declspec(dllexport) LRESULT CALLBACK  MyHookMouse(int nCode, WPARAM wParam, LPARAM lParam)

{

printf("in hook mouse function\n");

return 1;

}

HMODULE g_Module;

extern "C" _declspec(dllexport)  BOOL APIENTRY DllMain( HMODULE hModule,

DWORD  ul_reason_for_call,

LPVOID lpReserved

)

{

switch (ul_reason_for_call)

{

case DLL_PROCESS_ATTACH:

case DLL_THREAD_ATTACH:

case DLL_THREAD_DETACH:

case DLL_PROCESS_DETACH:

{

break;

}

}

return TRUE;

}

extern "C" _declspec(dllexport) void FuncHookDevice()

{

if (!g_HookHwnd)

{

printf("start hook\n");

g_HookHwnd = SetWindowsHookEx(WH_KEYBOARD_LL, MyHookFun, g_Module, 0);

//g_hMouse = SetWindowsHookEx(WH_MOUSE_LL, MyHookMouse, g_Module, 0);  //暂时禁用鼠标钩子

}

}

extern "C" _declspec(dllexport) void FuncEndHook()

{

printf("end hook\n");

UnhookWindowsHookEx(g_HookHwnd);

//UnhookWindowsHookEx(g_hMouse);   //暂时禁用鼠标钩子

g_HookHwnd = NULL;

}

java程序:

public class HookTest {

public interface  Hook extends Library{

Hook INSTANCE = (Hook) Native.loadLibrary("lib/Hook",Hook.class);

public void FuncEndHook();

public void FuncHookDevice();

}

public static void main(String[] args) {

Hook.INSTANCE.FuncHookDevice();

}

}

运行结果:

程序运行完后发现只输出了”start hook” 然后程序就停止了运行.并没有打印出”in hook key function”.说明程序是没有进入到钩子函数内部的. 这个c++程序的钩子我是经过测试的,使用c++调用dll可以成功的禁用掉键盘或者鼠标.

所以为什么用java调用的时候就无效呢.

jni hook java_java通过jni调用hook无效相关推荐

  1. 不要在循环,条件或嵌套函数中调用 Hook

    只在最顶层使用 Hook 不要在循环,条件或嵌套函数中调用 Hook, 确保总是在你的 React 函数的最顶层调用他们.遵守这条规则,你就能确保 Hook 在每一次渲染中都按照同样的顺序被调用.这让 ...

  2. JNI_OnLoad 回调Java_Java本地接口(JNI)编程指南和规范(第八章)

    第八章 JNI的附加功能(Additional JNI Features) 我们已经讨论了JNI被使用来写本地方法和嵌入一个Java虚拟器实现到一个本地应用程序中的功能.这章介绍JNI剩余的功能. 8 ...

  3. hook java_Java 实现 Hook 对鼠标键盘监听 - 沐早'S NOTEBOOK - CSDN博客

    Java 实现全局(全操作系统)的鼠标和键盘监控,使用的是SWT Win32 Extension 项目,在以前若使用Java恐怕是很难实现的! SWT Win32 Extension 让Java拥有了 ...

  4. xposed hook java_[原创]Android Hook 系列教程(一) Xposed Hook 原理分析

    章节内容 一. Android Hook 系列教程(一) Xposed Hook 原理分析 二. Android Hook 系列教程(二) 自己写APK实现Hook Java层函数 三. Androi ...

  5. 万物皆可 Hook,探究 Xposed 框架 Hook 原理

    作者 |俞家欢 低头需要勇气,抬头需要实力 引言 平时用着 Android 手机,喜欢折腾的同学或多或少都接触过 Xposed 框架,解锁.Root.刷包,一气呵成.本文将从原理和实践两部分带大家了解 ...

  6. 【Android 插件化】Hook 插件化框架 ( 使用 Hook 方式替换插件 Activity 的 mResources 成员变量 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  7. 【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 二 | AMS 进程相关源码 | 主进程相关源码 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  8. 【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 一 | Activity 进程相关源码 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  9. JNI开发笔记(五)--JNI语法总结

    JNI语法总结 引 前言 1. 传参类型为变量/变量指针 1.1 变量 1.2 变量指针 2. 传参类型为数组指针 3. 传参类型为结构体指针 引 JNI开发笔记(一)–Android Studio安 ...

最新文章

  1. [公告]欢迎您加入WF技术研究团队
  2. Flickr.net傻瓜教程(二)
  3. java opennlp_使用opennlp进行文档分类
  4. php 检测密码,php如何检测账号密码是否匹配
  5. MySQL5.6解压版详细安装教程(附安装配置、MySQL数据库设置root管理员密码,MySQL字符集设置问题及解决办法)
  6. 无法创建系统映像_如何创建USB驱动器的映像
  7. Linux Kernel 5.13 稳定版发布:初步支持 M1 芯片
  8. 大道至简读书笔记(1)
  9. 美通企业周刊 | 世界最长海底公路隧道在青海开工;乐高华南首家品牌旗舰店开业;洲际加速布局粤港澳大湾区...
  10. html5 文本框只能输入正整数,控制input文本框只能输入正整数
  11. DPDK-实战之load_balancer(负载均衡)
  12. 安卓圆形图片控件CircleImageView的使用
  13. 股票收益率与现金分红行为之间的关系,及半强制分红政策评价
  14. 【matlab 图像处理】 guide 图像去雾系统
  15. 全球及中国暗箱针孔相机行业需求潜力与销售前景态势分析报告2022版
  16. 微软 Visual Studio 2022 Preview 3 发布
  17. Win10中解决Prolific PL2303出现错误代码10的问题
  18. 项目(day01网站流量指标统计)
  19. 中国电信189邮箱手机推送功能评测
  20. LoG算子与DoG算子相似性数学推导

热门文章

  1. python中利用pygame模块输出文字
  2. C++ STL 一个简单的文件输入输出示例
  3. [转] 面向对象编程 - 获取对象信息
  4. 开源媒体标注系统cvat
  5. js系列教程7-DOM操作全解
  6. 获取矩阵元素的方法 4种方法 B(1,2) B(9) B(sub2ind(size(B),3,4))
  7. html状态码206,HTTP状态码206
  8. Compile、Make和Build的区别(as make, build, clean, run)
  9. hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新
  10. 《iOS8 Swift编程指南》类书图像