首页> 中国专利> 一种整合Wine与Android鼠标输入的方法

一种整合Wine与Android鼠标输入的方法

摘要

本发明公开了一种整合Wine与Android鼠标输入的方法,主要针对在Android系统中执行普通的Linux应用程序时发生的鼠标输入事件进行处理,其处理过程包括以下步骤:创建一个代理进程WineProxy接收所述鼠标输入事件;在TinyX中切断从内核获取鼠标输入的途径;在TinyX和WineProxy之间建立通信连接;发生鼠标输入事件,WineProxy通过所述通信连接向TinyX发出事件通知;TinyX将接收所述事件通知后,将其封装成TinyX格式的消息后发送至应用程序进程进行处理。

著录项

  • 公开/公告号CN102364434A

    专利类型发明专利

  • 公开/公告日2012-02-29

    原文格式PDF

  • 申请/专利权人 浙大网新科技股份有限公司;

    申请/专利号CN201110173748.8

  • 申请日2011-06-24

  • 分类号

  • 代理机构杭州宇信知识产权代理事务所(普通合伙);

  • 代理人张宇娟

  • 地址 310030 浙江省杭州市三墩西园八路1号浙大网新软件园A楼15层

  • 入库时间 2023-12-18 04:21:34

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2014-04-02

    授权

    授权

  • 2012-04-11

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20110624

    实质审查的生效

  • 2012-02-29

    公开

    公开

说明书

技术领域

本发明涉及智能移动终端领域,更具体的说,涉及一种整合Wine与Android 鼠标输入的方法。

背景技术

以手机为代表的智能化移动终端是计算机技术一个重要发展方向,因此市 场竞争非常激烈。谷歌公司和开放手机联盟推出Android操作系统和基于此系 统的手机以来,基于Android系统的手机市场份额不断增多,因此越来越多的 用户体验问题被关注。

所谓Android操作系统,实际上是对Linux操作系统的一种改编和扩充, 它的内核是经过修改的Linux的内核,但是在用户空间却专门针对例如手机的 移动终端设备的应用特点作了大幅的改进和增强,这些改动大都与编程模式和 图形界面,即图形化用户界面(GUI)有关。

在带图形界面的Linux操作系统中,有关图形界面的功能由X视窗系统提 供,而鼠标输入也是图形界面功能的一部分。运行着应用软件的进程都不直接 读取鼠标输入,而是通过进程间通信从X服务进程(Xserver)获取输入。人机 交互的输入先由本系统中唯一的Xserver读取,由Xserver统一加以前期处理, 然后根据屏幕上光标的当前位置以及当前处于“聚焦”状态的视窗配送给合适的 进程/线程。此处所说的前期处理可简可繁,简单的处理由X视窗本身加以实施, 复杂的处理则要由外挂的程序模块加以处理,而鼠标输入处理就属于这样的外 挂程序模块。所以,用于Linux应用的鼠标输入处理实际上是为X视窗的鼠标 输入处理。

X视窗属于另一个开源软件项目,早在Unix时代即已存在。由于Linux系 统大多离不开图形界面,X视窗实际上已经成了Linux操作系统的一部分。为 适应移动终端和其它嵌入式系统的需要,技术人员将X视窗加以裁剪、缩编、 简化,成为一个小型化的版本,称为TinyX。因此TinyX是专门与嵌入式Linux 配对使用的X视窗系统,所以也将手机上的Linux应用而开发的鼠标输入处理 程序称为TinyX鼠标出入处理程序。

可是,在Android系统中,却甩开TinyX,包括鼠标输入处理在内的所有 图形界面功能全都由Android自己提供。同样,Android也有自己类似于TinyX 那样的集中处理和配送输入信息的机制。使得如果需要在Android手机上运行 普通的Linux应用,鼠标输入的处理就成为一个问题。这是因为,Linux应用必 须与TinyX配套运行,而用了TinyX,就只能使用与其配套的TinyX鼠标输入 处理程序,可是所有的Android应用却只能继续使用由Android提供的鼠标输 入处理程序。这样,就会形成TinyX和Android同时共存的局面,此时来自触 摸式屏幕和其它输入设备的物理状态信息不再由唯一的实体加以统一处理和配 送,会造成以下两方面的问题。首先,可能会有争抢输入信息的情况发生;其 次,即使不发生争抢输入信息的情况,使用者也可能只好在与Android应用交 互时采用一种鼠标输入处理程序,而在与Linux应用交互时采用另一种鼠标输 入处理程序,由于两者在功能和性能上的差异,会给用户体验带来不便。

把Wine移植到Linux平台后,基于Windows操作系统的WinCE/WM应用 软件可在Linux平台运行,因此同样存在TinyX与Android争抢Wine应用程序 鼠标输入的问题。

发明内容

有鉴于此,本发明的目的在于提供一种整合Wine与Android鼠标输入的方 法,使得Android成为统一接收、处理、配送鼠标输入信息的唯一实体,向在 Android手机上运行的Linux应用提供鼠标输入信息,让使用者不需要在同一台 手机上因为要与不同的应用交互而使用不同的鼠标输入处理程序。

依据本发明一实施例的一种整合Wine与Android鼠标输入的方法,主要针 对在Android系统中执行普通的Linux应用程序时发生的鼠标输入事件进行处 理,其处理过程包括以下步骤:

步骤1,创建一个代理进程WineProxy接收所述鼠标输入事件;

步骤2,在TinyX中切断从内核获取鼠标输入的途径;

步骤3,在TinyX和WineProxy之间建立通信连接;

步骤4,发生鼠标输入事件,WineProxy通过所述通信连接向TinyX发出事 件通知;

步骤5,TinyX将接收所述事件通知后,将其封装成TinyX格式的消息后发 送至应用程序进程进行处理。

依照以上技术方案实现的整合Wine与Android鼠标输入的方法,鼠标输入 就会统一流经由Android提供的鼠标处理程序和配送机制,先由代理进程加以 接收,再转发给TinyX,最后到达运行着的Linux应用进程,整个过程中只有 一套鼠标输入信息的处理和配送机制,从而实现Wine与Android鼠标输入整合。

附图说明

图1所示为整合Wine与Android鼠标输入系统基本结构示意图;

图2所示为整合Wine与Android鼠标输入的软件结构示意图;

图3所示为整合Wine与Android鼠标输入处理流程图。

具体实施方式

以下结合附图对本发明的优选实施例进行详细描述,但本发明并不仅仅限 于这些实施例。本发明涵盖任何在本发明的精髓和范围上做的替代、修改、等 效方法以及方案。为了使公众对本发明有彻底的了解,在以下本发明优选实施 例中详细说明了具体的细节,而对本领域技术人员来说没有这些细节的描述也 可以完全理解本发明。

参考图1,所示为整合Wine与Android鼠标输入系统基本结构示意图,图 中水平虚线表示用户空间与系统空间的分界,虚线以上为用户空间,虚线以下 为系统空间,即Linux内核140。WinCE/WM应用进程120包括WinCE/WM的 EXE映像121和Wine动态链接库122。除运行WinCE/WM应用进程120之外, 系统中至少还有两个进程,一个是Wineserver110,即Wine服务器进程;另一 个是Xserver130,即TinyX服务器进程。WinCE/WM应用进程120之所以能在 Linux内核上运行,是因为有Wineserver110和Wine动态链接库122的支持。 而WinCE/WM应用进程120之所以能获取鼠标器输入,之所以能在屏幕上显示 图形,是因为有Xserver130的存在。在常规的Linux系统中,来自鼠标器的输 入全部为Xserver所截获,再由Xserver分发给当前受到聚焦的进程。

参考图2,所示为整合Wine与Android鼠标输入的软件结构示意图。整合 Wine与Android鼠标输入对原有Android系统的修改主要涉及以下三部分。其 中在用于管理应用程序的子系统中修改comctl32.dll和winex11.drv.dll的相应源 代码,增加下述功能,在comctl32.dll中添加可以判断是否需要弹出辅助输入框 的功能,使其可以根据鼠标点击的位置判断该点击是否需要在屏幕上弹出辅助 输入框作为响应,在winex11.drv.dll中添加一个api函数,使Wine可以向Xserver 发出弹出辅助输入框的请求。

本实例系统采用TinyX作为系统中的Xserver。对TinyX的修改主要集中在 切断从内核获取鼠标输入的途径。具体的说,将原先TinyX中从系统内核获取 鼠标点击输入的代码修改为通过socket从WineProxy处获取相应的鼠标输入行 为。

WineProxy为本发明在Android系统中新建立的一个任务。WineProxy需要 实现的功能包括监控屏幕上的鼠标点击操作,记录鼠标点击操作的类型和具体 的位置信息,并将其封装成X11系统标准的信息格式。此外系统中还需要实现 用于应用程序与TinyX和WineProxy之间通讯的Socket,及其相应的通讯协议。

WineProxy模块从屏幕读取鼠标的操作,并将其信息存储在缓冲区中,再 将缓冲区中的鼠标操作信息通过Socket发送给TinyX进行处理;TinyX负责鼠 标输入的具体处理,将从WineProxy获取的鼠标操作的信息封装成符合X标准 规范的信息格式,并将此信息通过Socket发送到Winex11.drv.dll进行处理, Winex11.drv.dll模块负责将TinyX发出的鼠标输入请求转换为可以被 comctl32.dll识别的格式,并将comctl32.dll的请求转换为标准的TinyX命令格 式。

参考图3,所示为整合Wine与Android鼠标输入处理流程图。

以下以Android系统中的软键盘输入过程作为实例,具体说明本发明的方 法如何实际应用于Android系统中的鼠标输入过程中,实现对鼠标输入的整合 功能。

步骤301,等待屏幕上的点击,进入步骤302;

由于软键盘输入在Android系统中的多个任务中都会采用,而且运行的时 间并不固定,因此系统需要随时监控用户在屏幕上的点击行为;

步骤302,WineProxy将此事件通过Socket发送给TinyX,进入步骤303;

当用户点击屏幕后,WineProxy中的onTouchEvent()方法得到调用。该方法 将用户的点击封装为系统内的一个事件,并记录下点击的具体类型和位置的信 息,用于以后的操作;

步骤303,TinyX将此事件转换为X11协议格式,将其转发给应用进程, 进入步骤304;

WineProxy将封装好的事件通过socket发送给Xserver,在本实例系统中, 即TinyX,此时发送的信息并不符合X11协议所定义的格式TinyX将此事件通 知转换成X11协议所规定的格式,并将其转发给应用进程,这个事件与TinyX 获知鼠标状态发生变化时的事件等价,包括点击类型,点击的具体位置等信息; TinyX将转化后的点击事件通过socket发送给应用进程的winex11.drv.dll;

步骤304,Winex11.drv.dll接收到来自TinyX的事件后,将其转发给 comctl32.dll,进入步骤305;

应用进程中的Winex11.drv.dll接收到来自TinyX的事件后,判断出其为鼠 标点击事件,随后将其上交给上层的comctl32.dll处理;

步骤305,判断点击是够落在可编程控件中,如果是,进入步骤306,如果 否,返回步骤301,

上层的comctl32.dll通过封装转换后的X11事件判断此时的光标是否落在 某个可编辑的控件中,如果是点击的位置属于不可编辑的区域,就忽略这次的 鼠标点击操作,系统状态跳回到步骤301,继续等待用户在屏幕上的鼠标点击 操作;

步骤306,调用Winex11.drv.dll的API函数,要求弹出输入框,进入步骤 307;

如果comctl32.dll判断鼠标点击的位置属于某个可编辑的控件中,就调用 Winex11.drv.dll提供的相应API函数,发出弹出软键盘的请求;

步骤307,等待输入框上的点击输入,进入步骤308;

步骤308,判断是否点击不可编辑区域,如果是,进入步骤309,如果否, 进入步骤310;

步骤309,关闭输入框,并返回步骤301;

步骤310,WineProxy从PosView的缓冲区中获取点击的位置,将其发送给 XServer,进入步骤311;

步骤311,XServer收到点击的位置,将其转发给应用进程的Winex11.drv.dll, 进入步骤312;

步骤312,Winex11.drv.dll向应用进程发送WM_POS消息,进入步骤313;

步骤313,应用程序接收WM_POS消息,返回至步骤307。

值得注意的是,上述过程还可以优化,将来可以将TinyX从这个过程中排 除出去,让应用进程通过Winex11.drv.dll直接与WineProxy通信,降低系统相 应鼠标操作的通讯延时,改善系统的用户体验。

本说明书选取并具体描述这些实施例,是为了最好地解释本发明的原理和 实际应用,从而使所属技术领域技术人员能最好地利用这个发明。修改的实施 例同样也适用于预期的特定应用。本发明的范围为权利要求书全部范围以及其 等效物。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号