精华内容
下载资源
问答
  • 在开发的过程中,常常重复输入一些东西,感觉效率较低,如我常使用的scp命令,里面常常需要输入ip地址,每次都重复的...首先键盘监听,直接对/dev/input/eventX进行全局监听(需要root权限,)。 当指定的快捷键按下...

    在开发的过程中,常常重复输入一些东西,感觉效率较低,如我常使用的scp命令,里面常常需要输入ip地址,每次都重复的键入比较烦。所以准备自己写一个剪切板。功能,按下快捷键,我常用的一些重复命令,自动复制进剪切板中。

    测试环境

    Ubuntu14.04/Ubuntu16.04

    功能简介

    首先键盘监听,直接对/dev/input/eventX进行全局监听(需要root权限,)。
    当指定的快捷键按下后,将我预设的字符串拷贝进剪切板,以供我粘贴使用。

     

    源码

    keyboard_watch.c

    注意: find_event函数帮助你找到键盘event号,如果不准,请手动测试以及设置event号。

    #include <stdlib.h>
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <string.h>
    #include <sys/mman.h>
    
    #include <linux/input.h>
    #include <fcntl.h>
    
    #define DBG_PRINTF(...)  
    //#define DBG_PRINTF printf
     
    int find_event(char *sub_buff)
    {
    	int iFd;
            FILE *tFp;
    	struct stat tStat;
    	char *command="cat /proc/bus/input/devices > log.txt" ;
    	char *file_path="./log.txt";
     	int number;
    	unsigned char  *file_buff;
    	/* according  to mouse name find event number*/
    	
    	char *buff;
     
    	tFp=fopen(file_path,"r+");    /* check if have log.txt file */
    	
    	if(NULL!=tFp) {
    	  fclose(tFp);
    	  system("rm log.txt");
    	}
     
    	system(command);
    	/* 打开文件 */
    	tFp = fopen(file_path, "r+");
    	
    	if (tFp == NULL) {
    		DBG_PRINTF("can't open %s\n", file_path);
    		return -1;
    	}
    	
            iFd = fileno(tFp);
     
    	fstat(iFd, &tStat);
    	 /* mmap the file to mem */
    	file_buff = (unsigned char *)mmap(NULL , tStat.st_size, PROT_READ |         PROT_WRITE, MAP_SHARED, iFd, 0);
    
    	if (file_buff == (unsigned char *)-1) {
    		DBG_PRINTF("mmap error!\n");
    		return -1;
    	}
    
    	buff = strstr(file_buff,sub_buff);/* in the mem file_buff  find sub_buff name */
    	
    	if(NULL == buff) {
       		DBG_PRINTF("can't find %s\n",sub_buff);
       		munmap(file_buff, tStat.st_size);
    		return -1;
    	}
    
            number = *(buff+strlen(sub_buff)+6);/* 6== event */
    	munmap(file_buff, tStat.st_size);
    	fclose(tFp);
    	return  number;
    }
    
    
    int main(int argc, char **argv)
    {
    	int number;
    	char *keyword="Handlers=sysrq kbd";
    	int keys_fd;
    	struct input_event t;
    	char dev_path[20];
    	unsigned char ctrl_down_flag = 0, state = 0;
    	unsigned func_enable = 1;
    
    	number = find_event(keyword);
    	DBG_PRINTF("found keyboard device:/dev/input/event%d\n",number-'0');
    	
    	sprintf(dev_path,"/dev/input/event%d",number-'0');
    	DBG_PRINTF("%s",dev_path);
    	keys_fd = open(dev_path, O_RDONLY);
    	if(keys_fd <= 0) {
    		printf("open /dev/input/event%d device error!\n",number - '0');
    		return -1;
    	}
    
    	while(1) {
    		if(read(keys_fd, &t, sizeof(t)) == sizeof(t)) {
    			if(t.type == EV_KEY)
    				if(t.value== 0 || t.value ==1 ) {
    					DBG_PRINTF("key %d %s\n", t.code, (t.value) ? "Pressed" : "Released");
    
    					if(t.code == 97 && t.value == 1) {
    						ctrl_down_flag = 1;
    						state = 1;
    					} else if(state == 1) {
    						state = 2;
    					} else {
    						ctrl_down_flag = 0;
    						state = 0;
    					}
    					
    					if(t.code == 102 && ctrl_down_flag)
    						break;
    
    					if(t.code == 102 && t.value == 0) {
    						func_enable ^= 1;
    						DBG_PRINTF("func_enable=%d \n",func_enable);
    					}
    					
    					if(func_enable) {
    						if(t.code == 70 && t.value == 1) {
    							DBG_PRINTF("scp xxxx@192.168.x.x:/data/ \n");
    							system("echo \"scp xxxx@192.168.x.x:/data/ \\c\" | xsel --clipboard");
    						}
    
    						if(t.code == 119 && t.value == 1) {
    							DBG_PRINTF("xxxx@192.168.x.x\n");
    							system("echo \"xxxx@192.168.x.x\\c\" | xsel --clipboard");
    						}
    					}
    			}
    		}
    	}	
    	close(keys_fd);
    	return 0;
    }

     

    预安装

    剪切板复制和粘贴功能依赖xsel命令,故先安装之。

    sudo apt-get install xsel

     

    编译执行

    gcc keyboard_watch.c -o  keyboard_watch
    sudo ./keyboard_watch

     

    使用简介

    键盘快捷键逻辑可以自行更改,这里默认为:


    按下home键:临时打开/关闭功能(默认为打开)
    按下右ctrl+home键:彻底退出程序
    按下scroll键:将预设的字符串1拷贝进剪切板
    按下pause键:将预设的字符串2拷贝进剪切板

     

    参考博客

    https://blog.csdn.net/qq_21792169/article/details/51458855

    https://blog.csdn.net/special00/article/details/82355556

     

     

     

    展开全文
  • 我在编辑器里测试还可以监听键盘按下的࿰c;但是换了一个应该程序就不行了࿰c;实现不了全局监听c;是需要设置什么吗</p>
  • title: Java中使用JNA实现全局监听Windows键盘事件 date: 2019-05-02 21:55:00 Java中使用JNA实现全局监听Windows键盘...等等,都有实现监听pc端键盘全局事件的方式。Java语言的实现方式真的找了很久资料,也问...
    title: Java中使用JNA实现全局监听Windows键盘事件
    date: 2019-05-02 21:55:00
    
    

    Java中使用JNA实现全局监听Windows键盘事件

    前言:

    一直打算做一个键盘音效软件,我就只会Java语言,其他语言有实现方式了,例如:c/c++、Python......等等,都有实现监听pc端键盘全局事件的方式。Java语言的实现方式真的找了很久资料,也问了很多人。。。百度上一搜索都是建议用jni让Java跟c/c++语言结合实现这个功能,或者用jna让Java跟c/c++语言结合实现这个功能.....我就是不会c语言啊!!!超级无敌理直气壮的,哼╭(╯^╰)╮

    其中一度想到了,要不我就放弃吧,乖乖学C/C++...最后,没错,我实现了,哈哈哈

    功能剖析:

    Java代码运行在Jvm虚拟机内,键盘输入的东西,只有操作系统知道,Jvm虚拟机如何知道呢?那就是JNI编程,通过写C/C++代码,监听操作系统的的输入流,然后通过JNI调用。虽然我不会JNI,也不会C/C++,但幸运的是,SUN公司已经实现了这个代码,弄出一个叫JNA的东西(Java Native Access),给Java提供了访问操作系统键盘鼠标的能力。

    然后将人家的代码完整拷贝,想跑一下,结果没jar包,一直报错,根据包名百度,在maven仓库中找相关jar包,(想找官方的jar包和一些文档,无奈,因为被收购的原因,有些链接已经挂了,找不到哇)找到几个,放进去,编译不报错了,运行一直报错,换了好几个jar包,还是不行,真是可郁闷了。最后在一个国内的仓库网站找到一个清晰的分类,下载里面的大分类下面的一组jar包,运行成功了。网址是www.mvnjar.com

    实现过程:

    下面贴上代码,感觉只是为了实现功能,代码写得很Low。运行需要的jar包在仓库下,网址是:https://www.mvnjar.com/net.java.dev.jna/list.html,下载jna-5.2.0.jar和jna-platform-5.2.0.jar这两个就可以

    package Soundeffects.hkq;
    ​
    import com.sun.jna.platform.win32.Kernel32;
    import com.sun.jna.platform.win32.User32;
    import com.sun.jna.platform.win32.WinDef;
    import com.sun.jna.platform.win32.WinUser;
    ​
    /***
     *  Demo WinKeyBoard
     * windows系统下实现全局键盘的监听,基于lib目录下的jna-4.0.0jar和jna-platform.jar
     * 我也不明白为啥这个类我改成线程了
     * @author hkq
     */
    ​
    public class WinKeyBoard implements Runnable{
        private static WinUser.HHOOK hhk;
        private static WinUser.LowLevelKeyboardProc keyboardHook;
        final static User32 lib = User32.INSTANCE;
        private boolean [] on_off=null;
        public WinKeyBoard(boolean [] on_off){
            this.on_off = on_off;
        }
    ​
        @Override
        public void run() {
            WinDef.HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null);
    ​
            keyboardHook = new WinUser.LowLevelKeyboardProc () {
                public WinDef.LRESULT callback(int nCode, WinDef.WPARAM wParam, WinUser.KBDLLHOOKSTRUCT info) {
    ​
                   System.out.println("运行成功,控制台输出");
    ​
                    return lib.CallNextHookEx(hhk, nCode, wParam, info.getPointer());
                }
            };
            hhk = lib.SetWindowsHookEx(User32.WH_KEYBOARD_LL, keyboardHook, hMod, 0);
            int result;
            WinUser.MSG msg = new WinUser.MSG ();
            while ((result = lib.GetMessage(msg, null, 0, 0)) != 0) {
    ​
            }
            lib.UnhookWindowsHookEx(hhk);
        }
    }
    ​

    System.out.println("运行成功,控制台输出");这个位置的代码可以替换你获取键盘事件后的操作啊

    bil bil bil bil

    展开全文
  • 监听键盘事件 方法一 document.addEventListener("keydown",function(e){ alert("您按下的按钮的keyCode为:"+e.keyCode) }) 方法二 document.onkeydown = function (e) { // 方向键--上 if (e.keyCode ...

    监听键盘事件

    方法一

    document.addEventListener("keydown",function(e){
        alert("您按下的按钮的keyCode为:"+e.keyCode)
    })

     

    方法二

    document.onkeydown = function (e) {
        // 方向键--上
        if (e.keyCode == 38) {
            alert("按下了方向键--上")
        }
        // 方向键--下
        if (e.keyCode == 40) {
            alert("按下了方向键--下")
        }
        // 方向键--左
        if (e.keyCode == 37) {
            alert("按下了方向键--左")
        }
        // 方向键--右
        if (e.keyCode == 39) {
            alert("按下了方向键--右")
        }
    }

     

    注意this的使用

    调用methods的方法时,最好使用that,因为this在子路由或子组件中不能直接获取到

    let that = this
    document.addEventListener("keydown",function(e){
        // 方向键--上
        if (e.keyCode == 38) {
            // 执行向上移动的方法
            that.moveUP()
        }
    })

     

    js 获取键盘keyCode值的方法

    使用下方代码,可以在按下键盘时,即刻了解键盘对应的keyCode值

    document.addEventListener("keydown",function(e){
        alert("您按下的按钮的keyCode为:"+e.keyCode)
    })

    或 

    document.onkeydown = function (e) {
        alert("您按下的按钮的keyCode为:"+e.keyCode)
    }

    查表获取键盘keyCode值

    当然,也可以通过查表找到键盘对应的keyCode值

    字符键盘

    按键 键值 按键 键值 按键 键值 按键 键值
    A 65 J 74 S 83 1 49
    B 66 K 75 T 84 2 50
    C 67 L 76 U 85 3 51
    D 68 M 77 V 86 4 52
    E 69 N 78 W 87 5 53
    F 70 O 79 X 88 6 54
    G 71 P 80 Y 89 7 55
    H 72 Q 81 Z 90 8 56
    I 73 R 83 0 48 9 57

    数字键盘

    按键 键值 按键 键值 按键 键值 按键 键值
    0 96 8 104 F1 112 F9 120
    1 97 9 105 F2 113 F10 121
    2 98 * 106 F3 114 F11 122
    3 99 + 107 F4 115 F12 123
    4 100 Enter 108 F5 116    
    5 101 - 109 F6 117    
    6 102 . 110 F7 118    
    7 103 / 111 F8 119    

    控制键

    按键 键值 按键 键值 按键 键值 按键 键值
    Backspace 8 Esc 27 Right Arrow(->) 39 -_ 189
    Tab 9 Spacebar 32 Down Arrow 40 .> 190
    Clear 12 Page Up 33 Insert 45 /? 191
    Enter 13 Page Down 34 Delete 46 `~ 192
    Shift 16 End 35 Num Lock 144 [{ 219
    Control 17 Home 36 ;: 186 \| 220
    Alt 18 Left Arrow 37 =+ 187 ]} 221
    Cape Lock 20 Up Arrow 38 ,< 188 "" 222

     

     

    展开全文
  • 我用JIntellitype实现全局热键设置,监听键盘事件ctrl+c和ctrl+v并且与系统剪贴板结合,当用户按下ctrl+v时打印出用户复制的存于剪贴板中的内容,现在情况是这样的当用户按快捷键ctrl+C复制时复制的内容并没有存入...
  • 1.from: https://blog.csdn.net/princek123/article/details/89670776 2.项目问题 <div class="item-btn-cont"> <span class="login-btn" v-on:keyup.enter.native="login('loginForm')" @c...

    1.from: https://blog.csdn.net/princek123/article/details/89670776

    2.项目问题

     <div class="item-btn-cont">
                  <span class="login-btn" v-on:keyup.enter.native="login('loginForm')"  @click="login('loginForm')">登 录</span>
                </div>
    
    
    export default {
      name: "UserLogin",
      
       created() {
        var _self = this
        document.onkeydown = function() {
          var key = window.event.keyCode
          if (key === 13) {
            _self.login('loginForm')
          }
        }
      },
    

    3.小实例
    如果用了element-ui的话要在后面加上native,不然被包裹不能读取到,这种写法只能在鼠标点击输入框的时候按回车才有用

    <el-form-item prop="account">
            
    <el-input v-on:keyup.enter.native="handleSubmit2()" style="color: #ffffff" type="text" v-model="ruleForm.account" auto-complete="off" placeholder="账号"></el-input>
     
    </el-form-item>
    

    在export default里面添加钩子函数

    export default {
      created() {
        var _self = this
     
        document.onkeydown = function(e) {
          var key = window.event.keyCode
     
          if (key === 13) {
            _self.handleSubmit2()
          }
        }
      },
      beforeDestroy() {
        document.onkeydown = function(e) {
          var key = window.event.keyCode
     
          if (key === 13) {
     
          }
        }
      },
    

    如果只有created函数的话那么在其他界面按回车会依然调用函数,造成错误的页面跳转,所以要离开这个界面是要取消。

    这样写就可以实现在该页面键盘回车实现登录

    展开全文
  • 1、监听全局键盘按下事件,例如监听全局回车事件 $(document).keydown(function(event){ if(event.keyCode == 13){ alert('你按下了Enter'); } }); 2、监听某个组件键盘按下事件,例如监听id为btn的...
  • pyHook包为Windows中的全局鼠标和键盘事件提供回调。 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等。 而正常工作需要pythoncom等操作系统的API的支持。   先链上一篇《pyHook...
  • 大部分键盘按下事件的监听是可获取焦点元素(input,button,textarea)可以生效,而...全局监听按键按下事件 使用tabindex 使用contenteditable 本文案例功能: 当点击open时,open变为close,class改变 当点击c...
  • C# 键盘操控鼠标指针

    2017-11-17 15:55:27
    利用C#的键盘全局监听事件实现操控鼠标 有关C#的全局键盘监听,可参考其他网友的文章 http://blog.csdn.net/c0411034/article/details/70306464 用到了KeyboardHook这个类 可以利用Windows 的Api设置鼠标位置,...
  • C#实现右下角图标(系统托盘)功能 https://www.cnblogs.com/hailexuexi/archive/2010/08/20/1804869.html C#全局监听Windows键盘事件 https://blog.csdn.net/c0411034/article/details/70306464/
  • 监听和发送键盘事件。 适用于 Windows 和 Linux(需要 sudo),具有实验性的 OS X 支持(感谢 @glitchassassin!)。 纯 Python,无需编译 C 模块。 零依赖。 安装和部署很简单,只需复制文件。 Python 2 和 3...
  • 您还可以检出Enigo,这是另一个c rdev简单库,用于在MacOS,Windows和Linux(x11)上侦听事件并将事件发送到键盘和鼠标。 您也可以查看Enigo,这是另一个帮助我编写此板条箱的板条箱。 到目前为止,这个箱子对我来说...
  • 这次学习总结一下 JNI,包括制作的一些小demo(获取屏幕像素值,全局监听键盘事件). 什么是JNI? JNI(Java Native Interface) Java本地接口,用于与C/C++进行交互 为什么要jni? 因为有些东西需要依赖于操作系统, ...
  • 开发DLL实例

    2012-11-04 01:31:00
    1、全局钩子,监听键盘字符: 钩子函数导出: HHOOK Hook;LRESULT CALLBACK Hookkey(int nCode,WPARAM wParam,LPARAM lParam);void Savekey(char* c); __declspec(dllexport)void WINAPI OutEv()//安装全局钩子{ ...
  • windows api实现计算机空闲关机

    千次阅读 2016-08-19 16:14:15
    1.实现监听全局的鼠标和键盘事件,2分钟不动则关机 2.实现计算机基本信息和性能信息的获取,比如C盘利用率,CPU利用率,内存利用率等等 3.开辟新的线程 完整代码如下: #include #include #include #include ...
  • Vue基础教程--自定义按键修饰符和指令(四)1 按键修饰符2 系统修饰键3 自定义按键修饰符4 鼠标按钮修饰符5 按键修饰符5.1 全局自定义...可以用如下修饰符来实现仅在按下相应按键时才触发鼠标或键盘事件的监听器。 .c
  • 按键精灵V1.0版

    2015-12-04 21:29:25
    要想在java中实现按键精灵,需要借助第三方来访问系统api,监听全局事件,如果你会c或c++,你也可以自己写。 我这里使用的是jintellitype,使用起来也是蛮简单的。 整个程序分为几个功能: 录制命令(录制键盘和...
  • 全局执行环境是window对象࿰c;这也意味着所有的全局变量或者方法都是window对象的属性或方法。当一个函数在被调用的时候都会创建自己的执行环境࿰c;而这个函数中所写的代码就开始进入这个函数的执行环境&#...
  • 假如我们面对的是鼠标、键盘驱动这样的底层环境࿰c;我们就需要一定的机制和系统来统一处理用户输入并且分配给正确的view或者model来处理。这样也就不难理解为什么经典MVC中称"controller是用户和系统之间的...
  • 数据一般来自于键盘输入࿰c;用它来实现一个可读流的例子。 我们使用 <code>data</code> 和 <code>end</code> 事件从 <code>stdin</code> 中读取数据。其中 data 事件的回调函数的参数就是 chunk 。 <pre><code> ...
  • 疯狂ios讲义源代码

    千次下载 热门讨论 2014-01-02 09:12:50
    1.1 objective-c与ios简介 2 1.1.1 objective-c简介 2 1.1.2 ios简介 3 1.2 搭建ios开发环境 3 1.2.1 下载并安装xcode和sdk 4 1.2.2 安装辅助工具和文档 6 1.3 第一个objective-c程序 6 1.3.1 使用文本编辑器...
  • [size=15.5556px] C、gets从键盘获取字串 [size=15.5556px] D、strcat字串连接函数 [size=15.5556px] E、strcmp字串比较函数 [size=15.5556px]4、函数 [size=15.5556px] 4.1 函数分类(库函数,自定义函数) ---第18课 ...
  • GNOME GTK+ 编程宝典.pdf

    千次下载 热门讨论 2012-11-19 15:28:08
    14.3 监听小部件 14.4 创建、实现、映射和显示 14.4.1 创建和撤消 14.4.2 显示和隐藏 14.4.3 映射和取消映射 14.4.4 实现和取消 14.4.5 显示和隐藏一个按钮 14.5 小部件的风格 14.6 设置小部件风格 ...
  • 键盘操作规则 83  5向键顺序 83  如何创建一个自定义控件 84 应用窗口规范 84  正常窗口 84  大小 84  按钮位置 84  应用菜单 84  编辑菜单 84  进度条窗口 84  进度条窗口的关闭和任务取消 84...
  • 键盘操作规则 83  5向键顺序 83  如何创建一个自定义控件 84 应用窗口规范 84  正常窗口 84  大小 84  按钮位置 84  应用菜单 84  编辑菜单 84  进度条窗口 84  进度条窗口的关闭和任务取消 84...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南...

空空如也

空空如也

1 2 3
收藏数 57
精华内容 22
关键字:

c键盘全局监听