• Linux基础 常见问题-模拟输入事件工具xdotool


    xdotool实际上是X11窗口的命令行自动化工具,可以实现 按键/组合按键事件模拟、鼠标事件模拟、文本输入模拟、窗口信息及焦点的获取。

    在android系统中模拟key事件/motion事件的工具主要是sendevent和getevent,那么在Linux上是否有更好的工具呢?当然是有的,Xorg系列的X工具之xdotool就是这个模拟事件非常棒的工具。而且用起来感觉比android要方便的多。可以在ubuntu/Debian上下载体验。只需要执行命令

    $sudo apt install xdotools

    安装即可。本文主要介绍xdotool的一些常见用法,通过xdotool --help查看下命令参数,如下:

    1. Available commands:
    2. getactivewindow
    3. getwindowfocus
    4. getwindowname
    5. getwindowpid
    6. getwindowgeometry
    7. getdisplaygeometry
    8. search
    9. selectwindow
    10. help
    11. version
    12. behave
    13. behave_screen_edge
    14. click
    15. getmouselocation
    16. key
    17. keydown
    18. keyup
    19. mousedown
    20. mousemove
    21. mousemove_relative
    22. mouseup
    23. set_window
    24. type
    25. windowactivate
    26. windowfocus
    27. windowkill
    28. windowclose
    29. windowmap
    30. windowminimize
    31. windowmove
    32. windowraise
    33. windowreparent
    34. windowsize
    35. windowunmap
    36. set_num_desktops
    37. get_num_desktops
    38. set_desktop
    39. get_desktop
    40. set_desktop_for_window
    41. get_desktop_for_window
    42. get_desktop_viewport
    43. set_desktop_viewport
    44. exec
    45. sleep

    主要涉及4个方面:按键/组合按键事件模拟、鼠标事件模拟、文本输入模拟、窗口信息。

    1 按键事件模拟

    @1 单个按键输入:

    1. #模拟按键按下并抬起,可以使用
    2. $xdotool key a
    3. #俩者等价
    4. #keydown 表示按键按下,keyup 表示按键抬起
    5. $xdotool keydown a keyup a

    @2 多按键组合输入:

    如果模拟组合按键可以使用如下方式,这里可以组合2/3个组合按键,比如:

    1. #组合按键 alt+F11
    2. $xdotool alt+F11
    3. #组合按键 ctrl+shift+t
    4. $xdotool ctrl+shift+t

    2 模拟鼠标

    @1 模拟鼠标:

    1. #滑鼠移動到 (100, 200) 的位置
    2. $xdotool mousemove 100 200
    3. #按下滑鼠左鍵(左鍵:1、滾輪:2、右鍵:3、滾輪上/下:4/5)
    4. #点击操作
    5. $xdotool click 1
    6. #鼠标按下操作
    7. $xdotool mousedown 2
    8. #鼠标抬起操作
    9. $xdotool mouseup 2

    @2 移动到坐标位置:

    1. #将鼠标移动到位置坐标:
    2. $xdotool mousemove 100 200
    3. #将鼠标相对当前位置分别移动x=100,y=100
    4. $xdotool mousemove_relative 100 100

    @3 取得目前滑鼠位置:

    $xdotool getmouselocation

    3 文本输入

    1. #对获取焦点的窗口 输入文本 text
    2. $xdotool type 'text'
    3. #对获取焦点的窗口 每隔500ms自动输入一个字符,输入文本 Hello world
    4. $xdotool type --delay 500 "Hello world"

    4 window相关操作

    这里总结了一些常见的xdotool的window操作

    1. #获取当前窗口的 窗口ID
    2. $xdotool getactivewindow
    3. 39845898 #这里会输出[窗口ID]
    4. #获得显示器长宽
    5. $ xdotool getdisplaygeometry
    6. 1920 1080 #输出的显示器长宽
    7. #通过[窗口ID]获得window的起点 和 长宽
    8. $xdotool getwindowgeometry [窗口ID]
    9. Window 39845898
    10. Position: 72,27 (screen: 0) #窗口起点
    11. Geometry: 1848x1053 #窗口长宽
    12. #通过窗口ID获得 该窗口 terminal的 进程ID
    13. $xdotool getwindowpid [窗口ID]
    14. #选中窗口,通过该命令 会出现一个图标,选中哪个窗口,就能输出哪个窗口的[窗口ID]
    15. $xdotool selectwindow
    16. #使得窗口ID为39845898的窗口 获得焦点
    17. $xdotool windowfocus [窗口ID]

    5 官方文档

    关于xdotool的官方手册,可参考:哦xdotool freeBSD手册个

  • 相关阅读:
    LeetCode112.路径总和(C++描述,递归解法)
    【SpringMVC笔记14】SpringMVC集成Jackson和FastJson两种方式处理json数据
    我的创作纪念日
    中国首幅1米分辨率土地覆盖图
    【C++】Linux下如何查看opencv的版本
    【问题之书】
    文本的换行与包裹 之可能是全网最详细的 line-break 中文介绍
    字符串6——实现 strStr()
    【FPGA教程案例43】图像案例3——通过verilog实现图像sobel边缘提取,通过MATLAB进行辅助验证
    思科的joy提取加密流量特征教程以及基本使用
  • 原文地址:https://blog.csdn.net/vviccc/article/details/126723853