jni hook java_java通过jni调用hook无效
我需要实现一个钩子程序来禁用鼠标键盘的输入,然后将其生成为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无效相关推荐
- 不要在循环,条件或嵌套函数中调用 Hook
只在最顶层使用 Hook 不要在循环,条件或嵌套函数中调用 Hook, 确保总是在你的 React 函数的最顶层调用他们.遵守这条规则,你就能确保 Hook 在每一次渲染中都按照同样的顺序被调用.这让 ...
- JNI_OnLoad 回调Java_Java本地接口(JNI)编程指南和规范(第八章)
第八章 JNI的附加功能(Additional JNI Features) 我们已经讨论了JNI被使用来写本地方法和嵌入一个Java虚拟器实现到一个本地应用程序中的功能.这章介绍JNI剩余的功能. 8 ...
- hook java_Java 实现 Hook 对鼠标键盘监听 - 沐早'S NOTEBOOK - CSDN博客
Java 实现全局(全操作系统)的鼠标和键盘监控,使用的是SWT Win32 Extension 项目,在以前若使用Java恐怕是很难实现的! SWT Win32 Extension 让Java拥有了 ...
- xposed hook java_[原创]Android Hook 系列教程(一) Xposed Hook 原理分析
章节内容 一. Android Hook 系列教程(一) Xposed Hook 原理分析 二. Android Hook 系列教程(二) 自己写APK实现Hook Java层函数 三. Androi ...
- 万物皆可 Hook,探究 Xposed 框架 Hook 原理
作者 |俞家欢 低头需要勇气,抬头需要实力 引言 平时用着 Android 手机,喜欢折腾的同学或多或少都接触过 Xposed 框架,解锁.Root.刷包,一气呵成.本文将从原理和实践两部分带大家了解 ...
- 【Android 插件化】Hook 插件化框架 ( 使用 Hook 方式替换插件 Activity 的 mResources 成员变量 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- 【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 二 | AMS 进程相关源码 | 主进程相关源码 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- 【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 一 | Activity 进程相关源码 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- JNI开发笔记(五)--JNI语法总结
JNI语法总结 引 前言 1. 传参类型为变量/变量指针 1.1 变量 1.2 变量指针 2. 传参类型为数组指针 3. 传参类型为结构体指针 引 JNI开发笔记(一)–Android Studio安 ...
最新文章
- [公告]欢迎您加入WF技术研究团队
- Flickr.net傻瓜教程(二)
- java opennlp_使用opennlp进行文档分类
- php 检测密码,php如何检测账号密码是否匹配
- MySQL5.6解压版详细安装教程(附安装配置、MySQL数据库设置root管理员密码,MySQL字符集设置问题及解决办法)
- 无法创建系统映像_如何创建USB驱动器的映像
- Linux Kernel 5.13 稳定版发布:初步支持 M1 芯片
- 大道至简读书笔记(1)
- 美通企业周刊 | 世界最长海底公路隧道在青海开工;乐高华南首家品牌旗舰店开业;洲际加速布局粤港澳大湾区...
- html5 文本框只能输入正整数,控制input文本框只能输入正整数
- DPDK-实战之load_balancer(负载均衡)
- 安卓圆形图片控件CircleImageView的使用
- 股票收益率与现金分红行为之间的关系,及半强制分红政策评价
- 【matlab 图像处理】 guide 图像去雾系统
- 全球及中国暗箱针孔相机行业需求潜力与销售前景态势分析报告2022版
- 微软 Visual Studio 2022 Preview 3 发布
- Win10中解决Prolific PL2303出现错误代码10的问题
- 项目(day01网站流量指标统计)
- 中国电信189邮箱手机推送功能评测
- LoG算子与DoG算子相似性数学推导
热门文章
- python中利用pygame模块输出文字
- C++ STL 一个简单的文件输入输出示例
- [转] 面向对象编程 - 获取对象信息
- 开源媒体标注系统cvat
- js系列教程7-DOM操作全解
- 获取矩阵元素的方法 4种方法 B(1,2) B(9) B(sub2ind(size(B),3,4))
- html状态码206,HTTP状态码206
- Compile、Make和Build的区别(as make, build, clean, run)
- hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新
- 《iOS8 Swift编程指南》类书图像