`
java_mzd
  • 浏览: 583247 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

远程操控系统中键盘和鼠标事件操控的小结

阅读更多

实现远程控制系统,无非就是实现两点:
                                 被控端远程屏幕的传送
                                 客户端控制命令的传送

   远程屏幕的传送这次先不做讨论,今天我们仅考虑下控制端操控信息的传送。

 

    要实现远程控制,流程无非就是:
    把客户机在服务器界面相应位置的鼠标、键盘信息记录下来--------按照协议打包消息-------发送给被控端------被控端接收消息-----依据协议解封消息------得到客户端传来的鼠标、键盘命令------根据命令,使用Robort对象驱动该命令------被控端系统做出响应。

   完成远程操控的机制是明白了,然而讲述远程操控的机制并不是此文重点。

   下面简单介绍下在根据完成以上流程时自己遇到的几个问题。



  问题一:
  不可识别的鼠标组合标识,报出异常
  Exception in thread "main" java.lang.IllegalArgumentException: Invalid combination of button flags


    在客户端,传送的鼠标标识通过e.getButton()得到
testJFrame.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e) {
int flag=e.getButton(); }
    到了被控端怎么就不可驱动了呢?

     把每个鼠标事件得到的信息进行打印
        发现,鼠标的左中右3个按键对应的flage值分别是 1   2   3

    看Robot  API,驱动鼠标时,传入的INT型参数buttons
用的分别是InputEvent.BUTTON1_MASK,InputEvent.BUTTON2_MASK,InputEvent.BUTTON3_MASK
      打印着3个常量  对应的值分别是 16 8 4


     并不是我们得到的flag值
      也就是说我们直接用Robot.mousePress来驱动flag是不对的
      必须使用对应的InputEvent里面的常量
      接收鼠标按键信息,驱动鼠标事,代码可写为
try {
robot = new java.awt.Robot();
if (flag== 1) {
robot.mouseRelease(InputEvent.BUTTON1_MASK);
}
if (flag== 2) {
robot.mouseRelease(InputEvent.BUTTON2_MASK);
}
if (flag==3) {
robot.mouseRelease(InputEvent.BUTTON3_MASK);
}
      问题搞定





  问题二
  keyBoardListener每次只能监听到键盘按键的一个信息(press/release)
  如果我们要完成组合键功能该怎么实现呢?
  一次传几个键的信息过去?


   这个思路貌似是很顺其自然的。然而我们很快会发现,我们每次对键盘做出刺激后,键盘
只是做出反应
   是无法监听到我们一次按下几个键,间隔了多少时间,而且根本就没有一个标准说多少秒 内按算是组合键,怎么样才算是组合键呢?这该怎么定义呢?


  苦思良久
  顿悟
  所谓组合,不就是一个键press后,还没来得及release,另外一个键又press了嘛? 
  也就是说,我们只要在每个键press或release时,把该消息发给被控端,并且用robot驱动,则在服务端,系统能根据按键的信息,自动就完成了组合键的功能



  问题3
  全局热键

   大家可能会有过这样的经历,看电影时,我们的QQ已经被最小化了,当我们听到好友消息时,只要按下提取消息的热键(比如Ctrl+Alt+Z),QQ面板就自动弹出来,提出消息

   然后,大家可以做个测试,跟好友用QQ开远程协助,在远程协助界面按下提取消息的热键 (比如Ctrl+Alt+Z)咱看看弹出来的到底是咱自己的QQ面板还是被控端的QQ面板。
  实验的结果是让人伤心的,弹出的是咱自己的QQ面板,也就是说这些系统的全局热键起作用的域是咱自己的机器,而不是传过去发给被控机。
  问题提出来了,那该怎么解决呢?
  百度之,GOOGLE之
  全局热键,系统属性,VB VC改起来比较简单。JAVA就……………………

  所以,先保留这个问题吧。


   问题4
   组建是否为屏幕焦点以及鼠标、键盘监听器到底应该加给界面的那个组件

   写一个界面,我们在界面上加上JButton组件,给组件加鼠标的3个监听器。

   通过输出打印测试,我们很容易发送,只有当鼠标进入界面,且界面为屏幕焦点时,鼠标事件才会被监听到
   这本是个好事,这样的机制,确保只有当我们开始监控的时候才传送操作信息给被控端
   以为键盘事件大致也会如此吧。


    对界面加上键盘事件监听器keyBoardListener当界面上什么组件都不加的时候,通过打印我们发现界面能监听到键盘的所有操作。
    如果我在界面上加个小组件,比如一个JButton butoon,然后,神奇的事情发生了,键盘事件监听不到了。
   但是当我把键盘事件加在这个button组件上时,键盘事件又能监听到了。
   难道要监听键盘事件,需要监听的组件在最前面,是屏幕的焦点?好奇!

   同样的实验,把JButton换成JLabel发现彻底监听不到键盘事件,悲剧。。。。

   此例中,为了实现鼠标事件和键盘事件的正确监听和发送,我们先把鼠标监听器加在显示Server界面的LABEL上,键盘监听器加在界面的操控按钮button上

 

下期关注

MouseAdapte与鼠标的3个监听器异同

监听器模型分析


   

 

分享到:
评论
1 楼 feargod 2011-09-18  
学习了 

相关推荐

    远程控制计算机鼠标键盘的实现

    在IT领域,远程控制计算机鼠标键盘的技术是一种常见且实用的功能,尤其在远程协助、系统管理以及多设备协作中。本文将深入探讨如何使用C#语言实现C/S(客户端/服务器)架构下的远程控制功能。 首先,我们要理解C/S...

    c#远程控制锁定鼠标与键盘

    在远程控制场景中,我们需要调用如`SendInput`、`LockWorkStation`等API函数来模拟键盘和鼠标输入,以及锁定用户的工作站。 1. **锁定鼠标**:在Windows系统中,可以使用`LockWorkStation` API来锁定计算机的工作站...

    java控制windows鼠标键盘

    在Java编程环境中,控制Windows操作系统中的鼠标和键盘是一项常见的需求,尤其在自动化测试、远程桌面控制或者模拟用户交互等场景中。本项目名为"java控制windows鼠标键盘",旨在提供一个工具箱,允许开发者通过调用...

    远程屏幕加鼠标键盘版

    3. `s.frm` 和 `c.frm`:这些是Visual Basic编程中的窗体文件,可能包含了用户界面的设计和逻辑代码,如远程屏幕显示、鼠标键盘控制等界面元素和功能。 4. `MSWINSCK.OCX`:这是一个Windows Socket控件,用于网络...

    基于B_S架构的服务型机器人远程操控系统研究.pdf

    - 远程操控:指的是通过网络等远程通信技术对机器人进行控制的技术。 - 服务型机器人:是指设计用于帮助人类进行各种服务工作的机器人,它们可以执行送餐、清洁、陪伴等任务。 以上就是从给定文件中提取的知识点。...

    后台 模拟 键盘 鼠标

    在Windows操作系统中,我们可以使用多种库和工具来实现后台模拟键盘鼠标。例如,`pyautogui` 是一个Python库,能够方便地实现这些功能。它提供了类似于 `press()` 和 `click()` 的函数,用于模拟键盘按键和鼠标点击...

    键盘模拟鼠标 c++

    在IT领域,键盘模拟鼠标是一项技术,允许用户通过键盘输入来控制鼠标的移动和操作,这对于某些特殊场景或无障碍访问非常有用。在这个“键盘模拟鼠标 c++”的项目中,开发者利用C++编程语言实现了这样的功能,使得...

    基于OneNET云平台的智能家居远程控制系统设计.pdf

    智能家居系统能够通过网络远程操控家庭设备,提升家庭生活的便捷性和安全性。 2. OneNET云平台:OneNET是中国移动提供的一个物联网开放平台,提供设备接入、数据管理、应用开发等功能,支持多种通信协议和数据格式...

    qt远程控制v

    3. **输入模拟**:解析接收到的键盘和鼠标事件,通过Qt的事件处理机制在远程系统上模拟这些输入。 4. **加密与安全**:为了保护数据安全,通常会使用SSL/TLS进行数据加密,防止信息被窃取或篡改。 5. **多线程**:...

    解决关闭远程桌面连接后,鼠标、键盘、剪切板失效问题

    退出远程桌面连接的exe文件,使退出后服务器功能一切正常,防止鼠标、键盘、剪切板失效,可定时

    远程控制鼠标(代码)

    实现远程控制鼠标的关键技术包括网络通信协议和鼠标事件模拟。网络通信协议如TCP/IP或UDP用于数据传输,确保控制指令能够准确无误地从客户端发送到服务器端。在协议层面上,可以使用自定义的协议或者已有的协议如RDP...

    远程控制系统实现远程控制

    远程控制系统是一种技术,它允许用户通过网络从一个设备或计算机操控另一个设备或计算机。在本项目中,我们使用了Visual Studio 2008作为开发工具来构建这样的系统。Visual Studio 2008是一款强大的集成开发环境...

    c语言实现远程控制鼠标

    在本项目中,"c语言实现远程控制鼠标" 是一个利用C语言编写的程序,它允许用户通过网络实现对远程计算机鼠标的实时控制,即本地鼠标的操作能够同步反映在远程计算机上。 首先,我们要理解这个项目的核心概念:网络...

    浅谈计算机网络远程控制系统的研究与应用.pdf

    远程操作工具控制主要是通过主控计算机的鼠标和键盘事件采集,再通过函数控制实现对远程计算机的操控。远程文件管理则是主控计算机负责对受控计算机文件的管理。远程应用程序执行则是直接在主控计算机上执行远程...

    Java远程控制系统2 桌面控制 (类似net-meeting)毕业设计 源代码

    Java远程控制系统,如同标题所提及的“Java远程控制系统2 桌面控制”,是一种基于Java技术实现的桌面共享和远程管理工具,它允许用户通过网络连接远程操控另一台计算机的桌面,实现类似NetMeeting的功能。这个系统...

    OnNow机房远程控制系统V2.0(Bulid1113)

    OnNow机房远程控制系统V2.0(Bulid1113)就是这样一款专为机房管理设计的远程控制软件,其核心功能在于让管理员能够在任何地方,通过网络对机房内的设备进行实时监控和操作。 首先,让我们深入了解"远程控制"这一概念...

    虚拟键盘鼠标驱动源码

    总的来说,虚拟键盘鼠标驱动源码是计算机系统中一个复杂的组成部分,涉及底层编程和操作系统原理,而测试程序则确保其功能的完善和稳定。正确理解和使用这类驱动,可以帮助我们更高效地实现各种自动化和远程控制任务...

    实现远程控制的一个小系统

    3. **数据编码与解码**:在远程控制过程中,需要将用户的指令(如键盘输入、鼠标移动等)编码成可以在网络上传输的字节流,到达目标机器后再解码执行。这可能涉及到JSON、XML或者自定义的二进制格式。在C++中,可以...

    网络上的远程操控软件

    远程操控软件基于TCP/IP协议,通过建立安全的网络连接来传输键盘、鼠标指令和屏幕显示数据。一般来说,这种连接需要经过身份验证和加密过程,以确保只有授权用户才能访问目标计算机。常见的协议有RDP(远程桌面协议...

Global site tag (gtag.js) - Google Analytics