Linux文本模式下监听鼠标事件

Linux文本模式下监听鼠标事件,这里是通过gpm这个来实现的,代码如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <unistd.h>
 4 #include <gpm.h>
 5
 6 void main(int argc,char **argv)
 7 {
 8   fd_set readset;
 9   Gpm_Event event;
10   Gpm_Connect conn;
11
12   conn.eventMask = ~0;
13   conn.defaultMask = ~GPM_HARD;
14   conn.maxMod = 0;
15   conn.minMod = 0;
16
17   if (Gpm_Open(&conn,0)==-1) {
18     printf("Can not open mouse connection\n");
19     exit(1);
20   }
21
22
23   while (1) {
24     FD_ZERO(&readset);
25     FD_SET(gpm_fd,&readset);
26     select(gpm_fd+1,&readset,0,0,0);
27
28     if (FD_ISSET(gpm_fd,&readset)) {
29       if (Gpm_GetEvent(&event)>0) {
30          printf("mouse: event 0x%02X, at %2i %2i (delta %2i %2i),"
31            "button %i, modifiers 0x%02X\r\n",
32            event.type,
33            event.x,event.y,
34            event.dx,event.dy,
35            event.buttons,
36            event.modifiers
37         );
38       }
39     }
40   }
41   while (Gpm_Close());
42 } 

编译:

gcc -o mouse mouse.c -lgmp

如果您的机器没有安装gmp,请先安装gmp,CentOS 6.0可以用下面的命令联网安装:

sudo yum install gpm*

我选择了安装下面这几个库:

gpm
gpm-devel
gpm-static

注:本文选自http://topic.csdn.net/u/20090407/23/f776fdca-c41b-4478-9fd5-93f61cfbbe92.html,
如有侵犯您的权益,请邮件通知我,我将会在收到通知后尽快删除相关内容。

时间: 2024-12-26 20:11:57

Linux文本模式下监听鼠标事件的相关文章

RedHat Linux文本模式下乱码解决方法

如果在安装RedHat Linux时选择中文未缺省语言,在文本模式下会出现乱码情况,对于在CLI(command-line interface,命令行界面)方式下调试程序时诸多不便,因为出错信息全是乱码,下面说明乱码问题如何解决: 方法1: 1.locale命令查看当前系统使用的语言 可以看到当前系统使用中文语言 2.export LC_ALL=POSIX修改LC_ALL语言选项 3.locale命令再次查看 可以看到语言设置已修改,但该方法在用户注销或重启后会失效,若要保存设置请看方法2 方法

vue监听滚动事件 实现动态锚点

前几天做项目的时候,需要实现一个动态锚点的效果 如果是传统项目,这个效果就非常简单.但是放到 Vue 中,就有两大难题: 1. 在没有 jQuery 的 animate() 方法的情况下,如何实现平滑滚动? 2. 如何监听页面滚动事件? 在浏览了大量文章.进行多次尝试之后,终于解决了这些问题 期间主要涉及到了 setTimeout 的递归用法,和 Vue 生命周期中的 mounted 一.锚点实现 在实现平滑滚动之前,得先确保基本的锚点功能 如果没有其他要求,直接用 <a href="#i

Python监听鼠标键盘事件

# -*- coding: utf-8 -*- __author__ = 'P00113' # coding: utf-8 import pythoncom import pyHook import win32api import win32con import time import threading import random VK_CODE = { 'backspace': 0x08, 'tab': 0x09, 'clear': 0x0C, 'enter': 0x0D, 'shift':

Linux下监听或绑定(bind)21端口失败

问题:写了一个程序,尝试在21端口监听,结果在执行bind的时候失败了. sockaddr_in sock_addr; sock_addr.sin_family = AF_INET; sock_addr.sin_addr.s_addr = host_inet_addr; sock_addr.sin_port = htons(port);    //port=21 ret = bind( m_socket_fd, (const sockaddr*)&sock_addr, sizeof(sockad

关于input的监听聚焦事件

今天是打算开始实战自己一直要写的网站,然后开始疯狂的翻网站找灵感,在路过阿里云的时候,突然发现——欸?这个输入框的效果看着可以欸,于是乎,电源一拔坐了起来,分析效果. 其实这个效果并不难理解: 1. 当鼠标指向的时候,文本框会拉长 : 2. 当鼠标移开的时候,文本框会恢复原来长度: 3. 当点击输入框后,光标在输入框中聚焦后,鼠标再移开,它会保持拉长后的长度: 4. 当失去聚焦的时候,文本框长度再次缩短: 一分析完,就开始埋头劈里啪啦的一阵猛敲: <!DOCTYPE html> <htm

Qt实现小功能之列表无限加载(创意很不错:监听滚动条事件,到底部的时候再new QListWidgetItem)

概念介绍 无限加载与瀑布流的结合在Web前端开发中的效果非常新颖,对于网页内容具备较好的表现形式.无限加载并没有一次性将内容全部加载进来,而是通过监听滚动条事件来刷新内容的.当用户往下拖动滚动条或使用鼠标滚轮的时候,页面会自动加载剩余的内容.如下: 简约而不简单,正是这种别出心裁,突破常规的设计才能得到用户的青睐…… 实现思路 在前端开发可以使用一些jQuery插件实现这种效果,后台只需要准备好数据就行了.在Qt中如何给列表组件(QListWidget,QTreeWidget, QTableWi

javascript事件监听与事件委托

事件监听与事件委托 在js中,常用到element.addEventListener()来进行事件的监听.但是当页面中存在大量需要绑定事件的元素时,这种方式可能会带来性能影响.此时,我们可以用事件委托的方式来进行事件的监听. 每个事件都经历三个阶段 捕获 到达目标 冒泡 事件委托需要用到事件的冒泡,冒泡就是事件发生时,上层会一层一层的接收这个事件. 如下页面结构: <body> <div id="div1"> <div id="div2"

[JS]笔记12之事件机制--事件冒泡和捕获--事件监听--阻止事件传播

-->事件冒泡和捕获-->事件监听-->阻止事件传播 一.事件冒泡和捕获 1.概念:当给子元素和父元素定义了相同的事件,比如都定义了onclick事件,点击子元素时,父元素的onclick事件也会被触发.js里称这种事件连续发生的机制为事件冒泡或者事件捕获.IE浏览器:事件从里向外发生,事件从最精确对象(target)开始触发,然后到最不精确的对象(document)触发,即事件冒泡 Netscape:事件从外向里发生,事件从最不精确的对象(document)开始触发,然后到最精确对象(

在Javascript中监听flash事件(转)

在Javascript中监听flash事件,其实有两种做法: 1.在特定的环境下(例如专门制作的flash),大家约定一个全局函数,然后在flash的事件中用ExternalInterface.call调用这个全局函数即可.2.在非特定的环境下(例如编写通用的flash插件),是不能限制用户的函数名的,所以根本无法约定全局函数:是否可以通过类似js的回调函数的形式实现事件监听呢? 其实js与flash的通信,一般情况下可以进行一些比较简单的通信,如传递基本的数据类型.传递简单的对象.调用函数等,