在ubuntu18.04下,通过编程向系统发送组合键

2023-10-08 17:48

本文主要是介绍在ubuntu18.04下,通过编程向系统发送组合键,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在ubuntu18.04下,通过编程向系统发送组合键

实现原理:

    在ubuntu,模拟发送组合键,本文的实现方式,是通过写文件的方式,来模拟键盘事件。在/dev/目录下,有一个“uinput”字符设备文件,我们可以写此文件,来模拟键盘事件。

    向“uinput”文件写一个按钮,则是单键按下,连续写多个按钮,则可以模拟组合键。
在这里插入图片描述

源码:

#include <linux/input.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/input.h>
#include <linux/uinput.h>
#include <sys/time.h>
#include <unistd.h>
#include <errno.h>
static void sendCtrl_Alt_Del_Key()
{int uinp_fd = open("/dev/uinput",O_RDWR);if (uinp_fd < 0){//qDebug()<<"unable to open /dev/uinput";return;}if(ioctl(uinp_fd ,UI_SET_EVBIT,EV_KEY)<0) //设置设备所支持的动作,#defineEV_KEY 0x01 // 按下键{//qDebug()<<"unable to set EV_KEY";return;}if(ioctl(uinp_fd ,UI_SET_EVBIT,EV_REP)<0) //设置设备所支持的动作,#defineEV_KEY 0x02 // 释放{//qDebug()<<"unable to set EV_REP";return;}for(int i = 0; i < 256; i++){  //---------------------???????ioctl(uinp_fd , UI_SET_KEYBIT, i);}//创建设备并写入至input子系统struct  uinput_user_dev  uinput;memset(&uinput,0,sizeof(uinput));uinput.id.version = 4;uinput.id.bustype = BUS_USB;strncpy(uinput.name,"virtual device a",UINPUT_MAX_NAME_SIZE);int ret = write( uinp_fd , &uinput, sizeof(uinput) );if(ret<0){//qDebug()<<"unable to write(uinp_fd , &uinput, sizeof(uinput)";return;}int err = ioctl(uinp_fd, UI_DEV_CREATE);if(err < 0){//qDebug()<<"unable to  creat device";return;}//construct input_event and send itstruct input_event event;unsigned int key_code = KEY_LEFTCTRL;  //键值usleep(100000);//importan//unsigned int key_code = KEY_CAPSLOCK;event.type = EV_KEY;event.code = key_code;event.value = 1; //1 means pressed signalgettimeofday(&event.time, NULL);if (write(uinp_fd, &event, sizeof(event)) < 0) {//qDebug()<<"unable to  write key event";return;}event.code  = KEY_LEFTALT;if (write(uinp_fd, &event, sizeof(event)) < 0) {//qDebug()<<"unable to  write key event";return;}event.code  = KEY_DELETE;if (write(uinp_fd, &event, sizeof(event)) < 0) {//qDebug()<<"unable to  write key event";return;}gettimeofday(&event.time, NULL);event.value = 0;// send sync signal///event.type = EV_SYN;event.code = SYN_REPORT;event.value = 0;gettimeofday(&event.time, NULL);if( write(uinp_fd, &event, sizeof(event))<0 )//发送同步信号{//qDebug()<<"unable to  write sync event";return;}close(uinp_fd);
}

这篇关于在ubuntu18.04下,通过编程向系统发送组合键的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/166967

相关文章

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默